shithub: fsgen

Download patch

ref: fbdac038aad6c5873e6ce3323a92591a14575583
parent: a976de46123b51045a1ea123ad452e8465e71b08
author: sirjofri <sirjofri@sirjofri.de>
date: Tue Dec 16 09:46:14 EST 2025

fix walk

--- a/fshandler.inc
+++ b/fshandler.inc
@@ -14,12 +14,14 @@
 static void
 fsstat(Req *r)
 {
-	uvlong q;
+	int q;
 	Filedata *fd;
 	void (*func)(Req *r);
 	
 	q = breakqid(r->fid->qid.path);
 	
+	fprint(2, "stat: q: %d\n", q);
+	
 	fd = &filedata[q];
 	r->d = fd->dir;
 	qidtype = q;
@@ -69,6 +71,8 @@
 	char *s;
 	int n;
 	
+	fprint(2, "find child %s of %d\n", name, qid);
+	
 	assert(qid >= Qroot && qid < Qmax);
 	if (!filehierarchy[qid]) {
 		return qid;
@@ -99,8 +103,8 @@
 		return nil;
 	}
 	
-	qt = breakqid(qid->path);
-	id = getqidid(qid->path);
+	qt = breakqid(fid->qid.path);
+	id = getqidid(fid->qid.path);
 	
 	if (strcmp(name, "..") == 0) {
 		qt = findparent(qt);
@@ -124,7 +128,6 @@
 		break;
 	}
 	
-	qidtype = i;
 	fd = &filedata[i];
 	
 	if (fd->dir.name[0] == '{') {
@@ -134,11 +137,14 @@
 		setvar(fid->aux, buf, name);
 	}
 	
+	qidtype = i;
 	qid->path = makeqid(getqidhash(fid));
 	qid->vers = 0;
 	qid->type = fd->dir.mode&DMDIR ? QTDIR : QTFILE;
 	fid->qid = *qid;
 	
+	fprint(2, "found child: %d of %d\n", qidtype, qt);
+	
 	return nil;
 }
 
@@ -163,8 +169,6 @@
 	q.path = makeqid(0);
 	q.vers = 0;
 	q.type = QTDIR;
-	
-	fprint(2, "qtype: %d\n", q.type);
 	
 	r->ofcall.qid = r->fid->qid = q;
 	respond(r, nil);
--- a/preamble.inc
+++ b/preamble.inc
@@ -23,17 +23,17 @@
 static uvlong
 makeqid(uvlong id)
 {
-	return (id << SHIFT) | qidtype;
+	return (id<<SHIFT) | qidtype;
 }
 
 static uvlong
 getqidid(uvlong qid)
 {
-	return (qid >> SHIFT);
+	return (qid>>SHIFT);
 }
 
 static uvlong
 breakqid(uvlong qid)
 {
-	return (qid & (0x1<<(SHIFT+1) - 1));
+	return (qid & ((0x1<<SHIFT) - 1));
 }
--- a/vars.c
+++ b/vars.c
@@ -143,6 +143,8 @@
 	"static void\n"
 	"setvar(FileAux *a, char *name, char *value)\n{\n");
 	
+	print("	if (!a) return;\n");
+	
 	for (v = vars; v; v = v->next) {
 		print(
 		"	if (strcmp(name, \"%s\") == 0) { a->%s = strdup(value); return; }\n",
--