lib9p

Go 9P library.
Log | Files | Refs

commit c35de20d746e80a7dcc398b588ac1286b4765ea4
parent 5772f41aabd4d84e6be16ce0387f129b04a4c818
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 19 Oct 2023 10:04:31 +0900

mv commands

Diffstat:
Dcmd/disk.go | 50--------------------------------------------------
Dcmd/iofs.go | 48------------------------------------------------
Dcmd/numfs.go | 208-------------------------------------------------------------------------------
3 files changed, 0 insertions(+), 306 deletions(-)

diff --git a/cmd/disk.go b/cmd/disk.go @@ -1,50 +0,0 @@ -// Disk exports the file system on the disk. -package main - -import ( - "flag" - "fmt" - "log" - "net" - "os" - - "lib9p" - "lib9p/diskfs" -) - -var dFlag = flag.Bool("D", false, "Prints chatty message to the stderr.") - -func main() { - flag.Parse() - - if flag.NArg() != 1 { - fmt.Fprintf(os.Stderr, "usage: %s [-D] <root>\n", os.Args[0]) - os.Exit(1) - } - - listener, err := net.Listen("tcp", "127.0.0.1:5640") - if err != nil { - log.Fatalf("listen tcp: %v", err) - } - - for { - conn, err := listener.Accept() - if err != nil { - log.Printf("accept connection: %v", err) - continue - } - disk, err := diskfs.Open(flag.Arg(0)) - if err != nil { - log.Fatalf("open file tree.") - } - go handle(conn, disk) - } -} - -func handle(conn net.Conn, disk *diskfs.FS) { - srv := lib9p.NewServer(disk, 8*1024, conn, conn) - if *dFlag { - srv.Chatty() - } - srv.Serve() -} diff --git a/cmd/iofs.go b/cmd/iofs.go @@ -1,48 +0,0 @@ -// Disk exports the file system on the disk. -package main - -import ( - "flag" - "fmt" - "log" - "net" - "os" - - "lib9p" - "lib9p/iofs" -) - -var dFlag = flag.Bool("D", false, "Prints chatty message to the stderr.") - -func main() { - flag.Parse() - - if flag.NArg() != 1 { - fmt.Fprintf(os.Stderr, "usage: %s [-D] <root>\n", os.Args[0]) - os.Exit(1) - } - - listener, err := net.Listen("tcp", "127.0.0.1:5640") - if err != nil { - log.Fatalf("listen tcp: %v", err) - } - - for { - conn, err := listener.Accept() - if err != nil { - log.Printf("accept connection: %v", err) - continue - } - dir := os.DirFS(flag.Arg(0)) - fsys := iofs.NewFS(dir) - go handle(conn, fsys) - } -} - -func handle(conn net.Conn, disk *iofs.FS) { - srv := lib9p.NewServer(disk, 8*1024, conn, conn) - if *dFlag { - srv.Chatty() - } - srv.Serve() -} diff --git a/cmd/numfs.go b/cmd/numfs.go @@ -1,208 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "io" - "io/fs" - "log" - "net" - "os" - "strings" - - "lib9p" -) - - -type numFS struct{ - root *numFile -} - - -func (fsys *numFS) String() string { - if fsys.root == nil { - return "<empty>" - } - return fsysString(fsys.root) -} - -func fsysString(f *numFile) string { - s := fmt.Sprintf("%d\n", f.id) - for _, c := range f.children { - cs := fsysString(c) - ln := strings.Split(cs, "\n") - for _, l := range ln { - s += "\t" + l + "\n" - } - } - return s -} - -func (fsys *numFS) OpenFile(name string, omode lib9p.OpenMode, perm fs.FileMode) (lib9p.File, error) { - if name == "." || name == "" { - return fsys.root, nil - } - wname := strings.Split(name, "/") - cwd := fsys.root -L: - for _, wn := range wname { - for _, c := range cwd.children { - if fmt.Sprintf("%d", c.id) == wn { - cwd = c - continue L - } - } - return nil, fmt.Errorf("not found") - } - return cwd, nil -} - -type numFile struct { - fs *numFS - id int - reader *bytes.Reader - children []*numFile -} - -func (f *numFile) Fsys() lib9p.FS { return f.fs } - -func (f *numFile) Stat() (*lib9p.FileInfo, error) { - var stat lib9p.Stat - stat.Type = 0 - stat.Dev = 0 - if f.id == -1 { - stat.Qid = lib9p.Qid{ - Type: lib9p.QTDIR, - Vers: 0, - Path: ^uint64(0), - } - } else { - stat.Qid = lib9p.Qid{ - Type: lib9p.QTFILE, - Vers: 0, - Path: uint64(f.id), - } - } - var mode lib9p.FileMode - if f.id == -1 { - mode |= lib9p.DMDIR - } - mode |= 0444 - stat.Mode = mode - stat.Atime = 0 - stat.Mtime = 0 - var length int64 - if f.id == -1 { - length = 0 - } else { - length = f.reader.Size() - } - stat.Length = length - stat.Name = fmt.Sprintf("%d", f.id) - stat.Uid = "kenji" - stat.Gid = "kenji" - stat.Muid = "kenji" - return &lib9p.FileInfo{stat}, nil -} - -func (f *numFile) Qid() lib9p.Qid { - var qid lib9p.Qid - if f.id == -1 { - qid = lib9p.Qid{ - Type: lib9p.QTDIR, - Vers: 0, - Path: ^uint64(0), - } - } else { - qid = lib9p.Qid{ - Type: lib9p.QTFILE, - Vers: 0, - Path: uint64(f.id), - } - } - return qid -} - -func (f *numFile) Read(p []byte) (int, error) { - if f.id == -1 { - return 0, fmt.Errorf("is a directory") - } - return f.reader.Read(p) -} - -func (f *numFile) ReadAt(p []byte, off int64) (n int, err error) { - if f.id == -1 { - return 0, fmt.Errorf("is a directory") - } - return f.reader.ReadAt(p, off) -} - -func (f *numFile) ReadDir(n int) ([]*lib9p.DirEntry, error) { - if f.id != -1 { - return nil, fmt.Errorf("not a directory") - } - de := make([]*lib9p.DirEntry, len(f.children)) - for i, c := range f.children { - s, err := c.Stat() - if err != nil { - return nil, fmt.Errorf("stat: %v", err) - } - de[i] = s - } - return de, nil -} - -func (f *numFile) Close() error { - if f.reader != nil { - f.reader.Seek(0, io.SeekStart) - } - return nil -} - -var dFlag = flag.Bool("D", false, "Prints chatty message to the stderr.") - -func main() { - flag.Parse() - - if flag.NArg() != 0 { - fmt.Fprintf(os.Stderr, "usage: %s [-D]\n", os.Args[0]) - os.Exit(1) - } - - fsys := new(numFS) - fsys.root = &numFile{ - fs: fsys, - id: -1, - reader: nil, - children: []*numFile{ - &numFile{fsys, 0, bytes.NewReader([]byte("0\n")), nil}, - &numFile{fsys, 1, bytes.NewReader([]byte("1\n")), nil}, - &numFile{fsys, 2, bytes.NewReader([]byte("2\n")), nil}, - &numFile{fsys, 3, bytes.NewReader([]byte("3\n")), nil}, - }, - } - - listener, err := net.Listen("tcp", "127.0.0.1:5640") - if err != nil { - log.Fatalf("listen tcp: %v", err) - } - - for { - conn, err := listener.Accept() - if err != nil { - log.Printf("accept connection: %v", err) - continue - } - - go handle(conn, fsys) - } -} - -func handle(conn net.Conn, fs *numFS) { - srv := lib9p.NewServer(fs, 8*1024, conn, conn) - if *dFlag { - srv.Chatty() - } - srv.Serve() -}