ref: 3031c788941e8993b029db77a7f26f76a8d91519
parent: 26a9021e80a28365768e4649b2c5c2c8331239f7
author: sirjofri <sirjofri@sirjofri.de>
date: Sun Dec 21 09:40:57 EST 2025
adds destroyfid to clean up allocated aux
--- a/code.c
+++ b/code.c
@@ -186,6 +186,7 @@
" .stat = fsstat,\n"
" .walk1 = fswalk,\n"
" .clone = fsclone,\n"
+ " .destroyfid = fsdestroyfid,\n"
"};\n\n");
print(
--- a/vars.c
+++ b/vars.c
@@ -66,8 +66,6 @@
printauxvars()
{Var *v;
- char buf[32];
- char *s;
foreachfile(collectvars, nil);
@@ -99,9 +97,6 @@
print("\n s = buf;\n"); for (v = vars; v; v = v->next) {- strcpy(buf, v->name+1);
- s = strchr(buf, '}');
-
print(
" if (f->%s) {\n"" strcpy(s, f->%s);\n"
@@ -127,9 +122,6 @@
"clonevars(FileAux *src, FileAux *dst)\n{\n"); for (v = vars; v; v = v->next) {- strcpy(buf, v->name+1);
- s = strchr(buf, '}');
-
print(
" if (src->%s) dst->%s = strdup(src->%s);\n",
v->name, v->name, v->name);
@@ -151,5 +143,23 @@
v->name, v->name);
}
+ print("}\n\n");+
+
+ /* destroyfid */
+ print(
+ "static void\n"
+ "fsdestroyfid(Fid *fid)\n{\n"+ " FileAux *a = fid->aux;\n"
+ " if (!a) return;\n\n");
+
+ for (v = vars; v; v = v->next) {+ print(
+ " if (a->%s) { free(a->%s); a->%s = nil; }\n",+ v->name, v->name, v->name);
+ }
+
+ print(" free(a);\n");+ print(" fid->aux = nil;\n"); print("}\n\n");}
--
⑨