icheck an error condition in fork() and print the actual execlp error - thinglaunch - A simple command and password promtper for X11. Err bitreich.org 70 hgit clone git://bitreich.org/thinglaunch URL:git://bitreich.org/thinglaunch bitreich.org 70 1Log /scm/thinglaunch/log.gph bitreich.org 70 1Files /scm/thinglaunch/files.gph bitreich.org 70 1Refs /scm/thinglaunch/refs.gph bitreich.org 70 1Tags /scm/thinglaunch/tag bitreich.org 70 1LICENSE /scm/thinglaunch/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 2c329aa6247ff532fce877debb1e80075bcbbba3 /scm/thinglaunch/commit/2c329aa6247ff532fce877debb1e80075bcbbba3.gph bitreich.org 70 1parent dfd9734eae6f1adea3f1afc84cb82beee283da84 /scm/thinglaunch/commit/dfd9734eae6f1adea3f1afc84cb82beee283da84.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sat, 8 Feb 2020 16:47:51 +0100 Err bitreich.org 70 i Err bitreich.org 70 icheck an error condition in fork() and print the actual execlp error Err bitreich.org 70 i Err bitreich.org 70 ichecks for -1 in fork() which can happen for example with resource process Err bitreich.org 70 ilimits. Print a clear error for fork() and execlp(). Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M thinglaunch.c | 14 ++++++++++---- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 10 insertions(+), 4 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/thinglaunch.c b/thinglaunch.c /scm/thinglaunch/file/thinglaunch.c.gph bitreich.org 70 i@@ -449,6 +449,7 @@ void Err bitreich.org 70 i execcmd(void) Err bitreich.org 70 i { Err bitreich.org 70 i char *shell; Err bitreich.org 70 i+ pid_t pid; Err bitreich.org 70 i Err bitreich.org 70 i XDestroyWindow(dpy, win); Err bitreich.org 70 i Err bitreich.org 70 i@@ -463,18 +464,23 @@ execcmd(void) Err bitreich.org 70 i exit(0); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- if (fork()) Err bitreich.org 70 i- exit(0); Err bitreich.org 70 i+ switch ((pid = fork())) { Err bitreich.org 70 i+ case -1: Err bitreich.org 70 i+ die("fork: %s\n", strerror(errno)); Err bitreich.org 70 i+ case 0: Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ _exit(0); Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i shell = getenv("SHELL"); Err bitreich.org 70 i if (!shell) Err bitreich.org 70 i shell = "/bin/sh"; Err bitreich.org 70 i Err bitreich.org 70 i execlp(shell, basename(shell), "-c", cbuf, (char *)NULL); Err bitreich.org 70 i- die("aiee, after exec"); Err bitreich.org 70 i+ die("execlp: %s\n", strerror(errno)); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- Err bitreich.org 70 i void Err bitreich.org 70 i die(char *errstr, ...) Err bitreich.org 70 i { Err bitreich.org 70 .