SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/thinglaunch/commit/2c329aa624...
Content-Typetext/plain; charset=utf-8