shithub: fsgen

Download patch

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");
 }
--