Start fvwm then switch to cwm, now execute the restart function.
Then fvwm is spawned. Well done.
That's because now argv[0] = fvwm.
I don't think fvwm needs to change, cwm has to.
We cannot use __progname 'cause it contains fvwm too.
My patch here is ugly, u_argv isn't portable anymore, it depends on cwm.
The fallback mechanism seems to work nevertheless.
(start twm then switch to cwm, execute restart and... it works!
I think that's because twm forks a new process each time you switch.
So if you switch 1 million times... Well, good luck with that.)
Index: util.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/util.c,v
retrieving revision 1.26
diff -u -p -u -p -r1.26 util.c
--- util.c 16 Apr 2020 17:12:49 -0000 1.26
+++ util.c 10 Dec 2022 12:53:18 -0000
@@ -94,13 +94,14 @@ u_argv(char * const *argv)
if (argv == 0)
return NULL;
- for (i = 0; argv[i]; i++)
+ siz = strlen("cwm") + 1;
+ for (i = 1; argv[i]; i++)
siz += strlen(argv[i]) + 1;
if (siz == 0)
return NULL;
p = xmalloc(siz);
- strlcpy(p, argv[0], siz);
+ strlcpy(p, "cwm", siz);
for (i = 1; argv[i]; i++) {
strlcat(p, " ", siz);
strlcat(p, argv[i], siz);