commit 09bdb46c6034b5376d33de023267317df0671dfc parent 2f236b7cd42eb89e5f4b0bb66c1500f644a41a24 Author: Matsuda Kenji <info@mtkn.jp> Date: Sat, 15 Jul 2023 16:25:18 +0900 add FileInfo Diffstat:
| M | server.go | | | 45 | +++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 45 insertions(+), 0 deletions(-)
diff --git a/server.go b/server.go @@ -7,6 +7,7 @@ import ( "log" "os" "strings" + "time" ) var chatty9P = false @@ -22,6 +23,50 @@ type Srv struct { io.Writer } +const ( + DMDIR = 0x80000000 + DMAPPEND = 0x40000000 + DMEXCL = 0x20000000 + DMTMP = 0x04000000 +) + +type FileInfo struct { + // type uint16 + dev uint32 + qid Qid + mode uint32 + aTime int32 + mTime int32 // also in fs.FileInfo + length int64 // also in fs.FileInfo + name string // also in fs.FileInfo + uid string + gid string + mUid string +} + +func (fi *FileInfo) Name() string { return fi.name } +func (fi *FileInfo) Size() int64 { return fi.length } +func (fi *FileInfo) Mode() fs.FileMode { + var mode fs.FileMode + if fi.mode&DMDIR != 0 { + mode |= fs.ModeDir + } + if fi.mode&DMAPPEND != 0 { + mode |= fs.ModeAppend + } + if fi.mode&DMEXCL != 0 { + mode |= fs.ModeExclusive + } + if fi.mode&DMTMP != 0 { + mode |= fs.ModeTemporary + } + mode |= fs.FileMode(fi.mode & 0777) + return mode +} +func (fi *FileInfo) ModTime() time.Time { return time.Unix(int64(fi.mTime), 0) } +func (fi *FileInfo) IsDir() bool { return fi.qid.Type()&QTDIR != 0 } +func (fi *FileInfo) Sys() any { return fi } + func getReq(s *Srv) (*Req, error) { var r Req