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;
}
--
⑨