stat.go (886B)
1 package diskfs 2 3 import ( 4 "fmt" 5 "io/fs" 6 "os/user" 7 "strconv" 8 "syscall" 9 10 "lib9p" 11 ) 12 13 func fiStat(pool *QidPool, id fileID, info fs.FileInfo) *lib9p.Stat { 14 qid, ok := pool.lookupID(id, info.ModTime()) 15 if !ok { 16 var err error 17 qid, err = pool.allocID(id, info) 18 if err != nil { 19 panic(fmt.Errorf("allocID: %v", err)) 20 } 21 } 22 23 stat := info.Sys().(*syscall.Stat_t) 24 usr, err := user.LookupId(strconv.Itoa(int(stat.Uid))) 25 if err != nil { 26 panic(fmt.Errorf("user: %v", err)) 27 } 28 group, err := user.LookupGroupId(strconv.Itoa(int(stat.Gid))) 29 if err != nil { 30 panic(fmt.Errorf("group: %v", err)) 31 } 32 33 return &lib9p.Stat{ 34 Type: 0, 35 Dev: 0, 36 Qid: qid, 37 Mode: lib9p.FSModeTo9Mode(info.Mode()), 38 Atime: uint32(stat.Atim.Sec), 39 Mtime: uint32(stat.Mtim.Sec), 40 Length: stat.Size, 41 Name: info.Name(), 42 Uid: usr.Username, 43 Gid: group.Name, 44 Muid: "", 45 } 46 }