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