lib9p

Go 9P library.
Log | Files | Refs

commit 5fef2c10e65e3b4419f2cca3d7bbec9bf67a986c
parent e13962e1eab8876353c34a774dad9425140c6e64
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 24 Sep 2023 13:25:28 +0900

add write to testFS

Diffstat:
Mclient_test.go | 17+++++++++++++++--
Mserver.go | 10+++++++++-
Mtest_fs.go | 19+++++++++++++++++++
3 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/client_test.go b/client_test.go @@ -57,7 +57,7 @@ func init() { content: []byte("unko\n"), stat: Stat{ Qid: Qid{Path: 4, Type: QTFILE}, - Mode: FileMode(0644), + Mode: FileMode(0666), Name: "file", Uid: "brian", Gid: "brian", @@ -201,7 +201,20 @@ func TestServer(t *testing.T) { &TOpen{ tag: 0, fid: 1, - mode: OREAD, + mode: ORDWR, + }, + &TRead{ + tag: 0, + fid: 1, + offset: 0, + count: 1024, + }, + &TWrite{ + tag: 0, + fid: 1, + offset: 2, + count: 4, + data: []byte("a"), }, &TRead{ tag: 0, diff --git a/server.go b/server.go @@ -494,7 +494,11 @@ func sRead(s *Server, r *Req) { } respond(r, nil) } -func rRead(r *Req, err error) {} +func rRead(r *Req, err error) { + if err != nil { + setError(r, err) + } +} func sWrite(s *Server, r *Req) { ifcall := r.ifcall.(*TWrite) @@ -544,6 +548,10 @@ func sWrite(s *Server, r *Req) { } func rWrite(r *Req, err error) { + if err != nil { + setError(r, err) + return + } // TODO: Increment Qid.Vers } diff --git a/test_fs.go b/test_fs.go @@ -41,6 +41,25 @@ func (f *testFile) Read(b []byte) (int, error) { return f.reader.Read(b) } +func (f *testFile) WriteAt(p []byte, off int64) (int, error) { + if f.reader == nil { + return 0, fmt.Errorf("not open") + } + if off < 0 || off > int64(len(f.content)) { + return 0, fmt.Errorf("bad offset") + } + + if off + int64(len(p)) > int64(len(f.content)) { + newcon := make([]byte, off+int64(len(p))) + copy(newcon, f.content) + f.content = newcon + } + + copy(f.content[off:], p) + f.reader.Reset(f.content) + return len(p), nil +} + type testFS struct { root *testFile }