diff --git a/cmd/ollie-9p/main.go b/cmd/ollie-9p/main.go index 696f8c2..40584a1 100644 --- a/cmd/ollie-9p/main.go +++ b/cmd/ollie-9p/main.go @@ -193,10 +193,15 @@ func cmdWrite(path string) { if err != nil { fatalf("open %s: %v", path, err) } - defer fid.Close() if _, err := io.Copy(fid, os.Stdin); err != nil { + fid.Close() fatalf("write %s: %v", path, err) } + // Close flushes buffered writes; errors (e.g., validation failures) + // are returned via Rclunk. + if err := fid.Close(); err != nil { + fatalf("close %s: %v", path, err) + } } func cmdRdwr(path string) { @@ -205,24 +210,30 @@ func cmdRdwr(path string) { if err != nil { fatalf("open %s: %v", path, err) } - defer fid.Close() // Write stdin data, err := io.ReadAll(os.Stdin) if err != nil { + fid.Close() fatalf("read stdin: %v", err) } if _, err := fid.Write(data); err != nil { + fid.Close() fatalf("write %s: %v", path, err) } // Seek back to 0 and read response if _, err := fid.Seek(0, 0); err != nil { + fid.Close() fatalf("seek %s: %v", path, err) } if _, err := io.Copy(os.Stdout, fid); err != nil { + fid.Close() fatalf("read %s: %v", path, err) } + if err := fid.Close(); err != nil { + fatalf("close %s: %v", path, err) + } } func cmdStat(path string) {