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 <hiltjo@codemadness.org> 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
.
Response:
text/plain