commit f380ada

Michael Forney  ·  2018-11-16 07:20:45 +0000 UTC
parent 5f348ea
launch: Use posix_spawn correctly

These functions don't set errno, and we need to make sure to initialize
the posix_spawnattr_t.
1 files changed,  +9, -6
+9, -6
 1@@ -462,13 +462,16 @@ main(int argc, char *argv[])
 2 	sprintf(buf, "%d", sock[1]);
 3 	setenv(SWC_LAUNCH_SOCKET_ENV, buf, 1);
 4 
 5-	if (posix_spawnattr_setflags(&attr, POSIX_SPAWN_RESETIDS|POSIX_SPAWN_SETSIGMASK) != 0)
 6-		die("failed to set spawnattr flags:");
 7+	if ((errno = posix_spawnattr_init(&attr)))
 8+		die("posix_spawnattr_init:");
 9+	if ((errno = posix_spawnattr_setflags(&attr, POSIX_SPAWN_RESETIDS|POSIX_SPAWN_SETSIGMASK)))
10+		die("posix_spawnattr_setflags:");
11 	sigemptyset(&set);
12-	if (posix_spawnattr_setsigmask(&attr, &set) != 0)
13-		die("failed to set spawnattr sigmask:");
14-	if (posix_spawnp(&pid, argv[optind], NULL, &attr, argv + optind, environ) != 0)
15-		die("failed to spawn server:");
16+	if ((errno = posix_spawnattr_setsigmask(&attr, &set)))
17+		die("posix_spawnattr_setsigmask:");
18+	if ((errno = posix_spawnp(&pid, argv[optind], NULL, &attr, argv + optind, environ)))
19+		die("posix_spawnp %s:", argv[optind]);
20+	posix_spawnattr_destroy(&attr);
21 
22 	run(sock[0]);
23