shithub: fsgen

Download patch

ref: cfb7b151dd1c6845afc2b39ee1deb4a01aa9a18c
parent: 3031c788941e8993b029db77a7f26f76a8d91519
author: sirjofri <sirjofri@sirjofri.de>
date: Sun Dec 21 09:59:05 EST 2025

fixes multiple variable handling

--- a/fshandler.inc
+++ b/fshandler.inc
@@ -97,7 +97,6 @@
 {
 	int q;
 	Filedata *fd;
-	void (*func)(Req *r);
 	
 	q = breakqid(r->fid->qid.path);
 	
@@ -108,15 +107,15 @@
 	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");
-	r->d.gid = estrdup9p("none");
 	if (fd->stat) {
-		func = fd->stat;
-		func(r);
+		fd->stat(r);
 		/* if function exists, it should respond */
 		return;
+	} else {
+		r->d.name = estrdup9p(fd->dir.name);
+		r->d.uid = estrdup9p("none");
+		r->d.gid = estrdup9p("none");
+		r->d.gid = estrdup9p("none");
 	}
 	respond(r, nil);
 	return;
--- a/preamble.inc
+++ b/preamble.inc
@@ -38,3 +38,4 @@
 {
 	return (qid & ((0x1<<SHIFT) - 1));
 }
+
--- a/test/test.fs
+++ b/test/test.fs
@@ -28,6 +28,19 @@
 /test/{fname}
 r{
 	char buf[512];
+	int a;
+	
+	if (strncmp("File", fname, 4) != 0) {
+		respond(r, "invalid filename");
+		return;
+	}
+	
+	a = atoi(&fname[4]);
+	if (a < 0 || a > 3) {
+		respond(r, "invalid file entry");
+		return;
+	}
+	
 	snprint(buf, sizeof buf, "read: %s\n", fname);
 	readstr(r, buf);
 	respond(r, nil);
@@ -35,6 +48,14 @@
 w{
 	respond(r, "write prohibited");
 w}
+
+/multi/{one}/{two}
+r{
+	char buf[512];
+	snprint(buf, sizeof buf, read: %s → %s\n", one, two);
+	readstr(r, buf);
+	respond(r, nil);
+r}
 
 # implement a directory listing
 /test
--- a/vars.c
+++ b/vars.c
@@ -16,9 +16,10 @@
 {
 	Var *v;
 	
-	for (v = vars; v; v = v->next)
-		if (v->name == name)
+	for (v = vars; v; v = v->next) {
+		if (strcmp(v->name, name) == 0)
 			return 1;
+	}
 	return 0;
 }
 
@@ -31,16 +32,17 @@
 	strcpy(buf, name);
 	buf[strlen(name)-1] = 0;
 	
+	if (hasvar(buf+1))
+		return;
+	
 	if (!vars) {
 		vars = mallocz(sizeof(Var), 1);
-		vars->name = buf+1;
+		vars->name = strdup(buf+1);
 		return;
 	}
-	if (hasvar(name))
-		return;
 	v = vars;
 	vars = mallocz(sizeof(Var), 1);
-	vars->name = buf+1;
+	vars->name = strdup(buf+1);
 	vars->next = v;
 }
 
--