On Sun, Mar 09, 2025 at 10:10:29AM +0100, g...@suckless.org wrote: > commit a70d5d2429abf8dcb70a8817990975dc9a621d27 > Author: NRK <n...@disroot.org> > AuthorDate: Fri Sep 9 14:50:12 2022 +0600 > Commit: Hiltjo Posthuma <hil...@codemadness.org> > CommitDate: Sun Mar 9 10:02:34 2025 +0100 > > simplify post-lock cmd and die if it fails > > this patch does two things: > > 0. simplify the code by using posix_spawn() > 1. unify the behavior of what happens if the post-lock cmd fails. > > currently, if `fork()` fails, slock will die without locking the screen. > HOWEVER if `execvp()` fails it prints a message to stderr (which the > user cannot see since the screen has been locked already) and only exits > the child while the parent locks the screen. > > to reproduce: > > # slock some_bin_that_doesnt_exist > > this behavior is inconsistent, if the idea is that post-lock cmd is > _not_ important then we shouldn't `die()` on `fork()` failure either. > and if we assume that the post-lock cmd _is_ important, then we should > die on exec failure as well. > > this patch assumes the latter and calls `die()` if `posix_spawn()` > fails. > > diff --git a/slock.c b/slock.c > index b2f14e3..b5a9b04 100644 > --- a/slock.c > +++ b/slock.c > @@ -13,6 +13,7 @@ > #include <stdio.h> > #include <string.h> > #include <unistd.h> > +#include <spawn.h> > #include <sys/types.h> > #include <X11/extensions/Xrandr.h> > #include <X11/keysym.h> > @@ -376,15 +377,12 @@ main(int argc, char **argv) { > > /* run post-lock command */ > if (argc > 0) { > - switch (fork()) { > - case -1: > - die("slock: fork failed: %s\n", strerror(errno)); > - case 0: > - if (close(ConnectionNumber(dpy)) < 0) > - die("slock: close: %s\n", strerror(errno)); > - execvp(argv[0], argv); > - fprintf(stderr, "slock: execvp %s: %s\n", argv[0], > strerror(errno)); > - _exit(1); > + pid_t pid; > + extern char **environ; > + int err = posix_spawnp(&pid, argv[0], NULL, NULL, argv, > environ); > + if (err) { > + die("slock: failed to execute post-lock command: %s: > %s\n", > + argv[0], strerror(err)); > } > } > >
Hi NRK, Thanks for the patch! It looks good and I've pushed it to master. -- Kind regards, Hiltjo