shithub: fsgen

Download patch

ref: 0ad44955a094502fa3bf9a5cef637bc62072f91c
parent: e524e96b88ffbd8b1f2c81ba5f3d77844e38860a
author: sirjofri <sirjofri@sirjofri.de>
date: Tue Dec 16 09:56:48 EST 2025

working read

--- a/fshandler.inc
+++ b/fshandler.inc
@@ -2,7 +2,19 @@
 static void
 fsread(Req *r)
 {
-	respond(r, nil);
+	int q;
+	Filedata *fd;
+	void (*func)(Req *r);
+	
+	q = breakqid(r->fid->qid.path);
+	
+	fd = &filedata[q];
+	if (!fd->read) {
+		respond(r, nil);
+		return;
+	}
+	fd->read(r);
+	/* if read is implemented, it should respond */
 }
 
 static void
@@ -20,8 +32,6 @@
 	
 	q = breakqid(r->fid->qid.path);
 	
-	fprint(2, "stat: q: %d\n", q);
-	
 	fd = &filedata[q];
 	r->d = fd->dir;
 	qidtype = q;
@@ -28,6 +38,7 @@
 	r->d.qid.path = makeqid(getqidhash(r->fid));
 	r->d.qid.vers = 0;
 	r->d.qid.type = fd->dir.mode&DMDIR ? QTDIR : QTFILE;
+	/* TODO: these names could leak memory! */
 	r->d.name = estrdup9p(fd->dir.name);
 	r->d.uid = estrdup9p("none");
 	r->d.gid = estrdup9p("none");
@@ -112,7 +123,6 @@
 		qid->vers = 0;
 		qid->type = fd->dir.mode&DMDIR ? QTDIR : QTFILE;
 		fid->qid = *qid;
-		fprint(2, "walk: QID: %d %d\n", qt, qid->type);
 		return nil;
 	}
 	
--- a/preamble.inc
+++ b/preamble.inc
@@ -10,9 +10,9 @@
 
 typedef struct Filedata Filedata;
 struct Filedata {
-	void *read;
-	void *write;
-	void *stat;
+	void (*read)(Req*);
+	void (*write)(Req*);
+	void (*stat)(Req*);
 	
 	Dir dir;
 };
--