Blame


1 b1b8898e 2017-06-21 progrium package ufs
2 b1b8898e 2017-06-21 progrium
3 b1b8898e 2017-06-21 progrium import (
4 b1b8898e 2017-06-21 progrium "os"
5 b1b8898e 2017-06-21 progrium "sync"
6 b1b8898e 2017-06-21 progrium
7 b1b8898e 2017-06-21 progrium p9p "github.com/docker/go-p9p"
8 b1b8898e 2017-06-21 progrium )
9 b1b8898e 2017-06-21 progrium
10 b1b8898e 2017-06-21 progrium type FileRef struct {
11 b1b8898e 2017-06-21 progrium sync.Mutex
12 b1b8898e 2017-06-21 progrium Path string
13 b1b8898e 2017-06-21 progrium Info p9p.Dir
14 b1b8898e 2017-06-21 progrium File *os.File
15 b1b8898e 2017-06-21 progrium Readdir *p9p.Readdir
16 b1b8898e 2017-06-21 progrium }
17 b1b8898e 2017-06-21 progrium
18 b1b8898e 2017-06-21 progrium func (f *FileRef) Stat() error {
19 b1b8898e 2017-06-21 progrium f.Lock()
20 b1b8898e 2017-06-21 progrium defer f.Unlock()
21 84f0f75d 2017-06-21 progrium return f.statLocked()
22 84f0f75d 2017-06-21 progrium }
23 b1b8898e 2017-06-21 progrium
24 84f0f75d 2017-06-21 progrium func (f *FileRef) statLocked() error {
25 b1b8898e 2017-06-21 progrium info, err := os.Lstat(f.Path)
26 b1b8898e 2017-06-21 progrium if err != nil {
27 b1b8898e 2017-06-21 progrium return err
28 b1b8898e 2017-06-21 progrium }
29 b1b8898e 2017-06-21 progrium
30 b1b8898e 2017-06-21 progrium f.Info = dirFromInfo(info)
31 b1b8898e 2017-06-21 progrium return nil
32 b1b8898e 2017-06-21 progrium }
33 b1b8898e 2017-06-21 progrium
34 b1b8898e 2017-06-21 progrium func (f *FileRef) IsDir() bool {
35 b1b8898e 2017-06-21 progrium return f.Info.Mode&p9p.DMDIR > 0
36 b1b8898e 2017-06-21 progrium }