lib9p

Go 9P library.
Log | Files | Refs

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 }