Simplify start_process by exploiting C99

Having a block for mixing a declaration was confusing.
Also I moved `dev_null` and `pid` to limit their scope.
This commit is contained in:
Takashi Kokubun 2019-07-15 10:29:39 +09:00
parent b789648830
commit a191009a26
No known key found for this signature in database
GPG Key ID: 6FFC433B12EE23DD

View File

@ -548,22 +548,19 @@ COMPILER_WARNING_IGNORED(-Wdeprecated-declarations)
static pid_t static pid_t
start_process(const char *abspath, char *const *argv) start_process(const char *abspath, char *const *argv)
{ {
pid_t pid;
// Not calling non-async-signal-safe functions between vfork
// and execv for safety
int dev_null = rb_cloexec_open(ruby_null_device, O_WRONLY, 0);
if (mjit_opts.verbose >= 2) { if (mjit_opts.verbose >= 2) {
int i;
const char *arg; const char *arg;
fprintf(stderr, "Starting process: %s", abspath); fprintf(stderr, "Starting process: %s", abspath);
for (i = 0; (arg = argv[i]) != NULL; i++) for (int i = 0; (arg = argv[i]) != NULL; i++)
fprintf(stderr, " %s", arg); fprintf(stderr, " %s", arg);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
} }
// Not calling non-async-signal-safe functions between vfork
// and execv for safety
int dev_null = rb_cloexec_open(ruby_null_device, O_WRONLY, 0);
pid_t pid;
#ifdef _WIN32 #ifdef _WIN32
{
extern HANDLE rb_w32_start_process(const char *abspath, char *const *argv, int out_fd); extern HANDLE rb_w32_start_process(const char *abspath, char *const *argv, int out_fd);
int out_fd = 0; int out_fd = 0;
if (mjit_opts.verbose <= 1) { if (mjit_opts.verbose <= 1) {
@ -578,7 +575,6 @@ start_process(const char *abspath, char *const *argv)
verbose(1, "MJIT: Failed to create process: %s", dlerror()); verbose(1, "MJIT: Failed to create process: %s", dlerror());
return -1; return -1;
} }
}
#else #else
if ((pid = vfork()) == 0) { /* TODO: reuse some function in process.c */ if ((pid = vfork()) == 0) { /* TODO: reuse some function in process.c */
umask(0077); umask(0077);