git: 9front

Download patch

ref: 7a401624c21a52bd3f8abf0e98667fad56712be3
parent: 1c179e58ed619a73da464cc140ef5bcf81588979
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Dec 8 16:33:08 EST 2025

gefs: disallow deletion of nonexistent config keys

--- a/sys/src/cmd/gefs/fs.c
+++ b/sys/src/cmd/gefs/fs.c
@@ -701,7 +701,7 @@
 		loadhist(mnt, &mnt->cron[i]);
 }
 
-Mount *
+Mount*
 getmount(char *name)
 {
 	Mount *mnt, *hd;
@@ -2763,10 +2763,11 @@
 void
 setconf(int fd, int op, char *snap, char *key, char *val)
 {
-	char kbuf[128];
+	char kbuf[128], xbuf[Kvmax];
 	Mount *mnt;
 	Tree *t;
 	Msg m;
+	Kvp x;
 
 	mnt = nil;
 	t = &fs->snap;
@@ -2787,8 +2788,11 @@
 	m.nv = strlen(val);
 	qlock(&fs->mutlk);
 	if(!waserror()){
-		fprint(fd, "set %q: %q", key, val);
-		btupsert(t, &m, 1);
+		if(op == Oinsert || btlookup(t, &m, &x, xbuf, sizeof(xbuf))){
+			fprint(fd, "set %s → %s\n", key, val[0]?val:"delete");
+			btupsert(t, &m, 1);
+		}else
+			fprint(fd, "set %s: no such key\n", key);
 		poperror();
 	}else
 		fprint(fd, "error setting config: %s\n", errmsg());
--