commit 5fef2c10e65e3b4419f2cca3d7bbec9bf67a986c
parent e13962e1eab8876353c34a774dad9425140c6e64
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 24 Sep 2023 13:25:28 +0900
add write to testFS
Diffstat:
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
}