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",--
⑨