shithub: snarflog

Download patch

ref: a2bc51f7f3479008175e41367105e7ab2516318e
parent: 80b771bdeb565f38e7e7dc643de61f7e152dd362
author: penny <penny@limitedideas.org>
date: Thu Nov 27 16:50:32 EST 2025

fix fundmamental mistake

--- a/main.go
+++ b/main.go
@@ -24,17 +24,26 @@
 func (f *snarfile) Write(fid uint64, offset uint64, data []byte) (uint32, error) {
 	f.mu.Lock()
 	defer f.mu.Unlock()
+	realwrite, err := os.OpenFile("/mnt/snarflogger/rsnarf", os.O_WRONLY, 0644)
+	if err != nil {
+		fmt.Printf("Coudn't open snarf for writing: %s\n", err)
+		return 0, err
+	}
 
-	f.realwrite.Write(data)
-	_, err := f.snarfStream.Write(data)
+	defer realwrite.Close()
+	realwrite.Write(data)
+	_, err = f.snarfStream.Write(data)
 	if err != nil {
 		fmt.Printf("Error writing to snarfStream: %v\n", err)
+		return 0, err
 	}
 	return uint32(len(data)), nil
 }
 
 func (f *snarfile) Read(fid uint64, offset uint64, count uint64) ([]byte, error) {
-	var reader io.Reader = f.real
+	real, _ := os.Open("/mnt/snarflogger/rsnarf")
+	defer real.Close()
+	var reader io.Reader = real
 	content, err := io.ReadAll(reader)
 	return content, err
 }
@@ -49,7 +58,33 @@
 	}
 }
 
+func mountmnt() {
+	fid, dir := fs.NewFS("penny", "penny", proto.DMDIR|0644)
+	stat := fid.NewStat("rsnarf", "penny", "penny", 0644)
+	mntfile := fs.NewBaseFile(stat)
+	dir.AddChild(mntfile)
+	var fds [2]int
+	var err error
+	err = plan9.Pipe(fds[:])
+	if err != nil {
+		fmt.Printf("Failed to create pipe for /mnt/snarflogger: %s\n", err)
+		os.Exit(1)
+	}
+	rw := os.NewFile(uintptr(fds[0]), "")
+
+	go func() {
+		if err := go9p.ServeReadWriter(rw, rw, fid.Server()); err != nil {
+			fmt.Printf("failed to serve /mnt/snarflogger: %v\n", err)
+			os.Exit(1)
+		}
+	}()
+
+	plan9.Mount(fds[1], -1, "/mnt/snarflogger", plan9.MREPL, "")
+	err = plan9.Bind("/dev/snarf", "/mnt/snarflogger/rsnarf", plan9.MREPL)
+}
+
 func main() {
+	mountmnt()
 	fid, dir := fs.NewFS("penny", "penny", proto.DMDIR|0644)
 
 	snarfStream := fs.NewSkippingStream(1024)
@@ -60,18 +95,7 @@
 		fmt.Printf("Err adding snarflog: %s\n", err)
 		return
 	}
-
-	realread, err := os.OpenFile("/dev/snarf", os.O_RDONLY, 0644)
-	if err != nil {
-		fmt.Printf("Coudn't open snarf: %s\n", err)
-		return
-	}
-	realwrite, err := os.OpenFile("/dev/snarf", os.O_WRONLY, 0644)
-	if err != nil {
-		fmt.Printf("Coudn't open snarf for writing: %s\n", err)
-		return
-	}
-	snarf := newSnarf(fid, "snarf", "penny", "penny", 0644, realread, realwrite, snarfStream)
+	snarf := newSnarf(fid, "snarf", "penny", "penny", 0644, nil, nil, snarfStream)
 
 	if err := dir.AddChild(snarf); err != nil {
 		fmt.Printf("Err: %s\n", err)
--