int singularity_fork_exec(unsigned int flags, char **argv) { int retval = 1; int i = 0; pid_t child; child = singularity_fork(0); if ( child == 0 ) { while(1) { if ( argv[i] == NULL ) { break; } else if ( i == 128 ) { singularity_message(ERROR, "singularity_fork_exec() ARGV out of bounds\n"); ABORT(255); } singularity_message(DEBUG, "fork argv[%d] = %s\n", i, argv[i]); i++; } singularity_message(VERBOSE, "Running child program: %s\n", argv[0]); if ( execvp(argv[0], argv) < 0 ) { //Flawfinder: ignore singularity_message(ERROR, "Failed to exec program %s: %s\n", argv[0], strerror(errno)); ABORT(255); } } else if ( child > 0 ) { retval = wait_child(); } singularity_message(DEBUG, "Returning from singularity_fork_exec with: %d\n", retval); return(retval); }
void singularity_fork_run(unsigned int flags) { pid_t child; int retval; child = singularity_fork(flags); if ( child == 0 ) { return; } else if ( child > 0 ) { retval = wait_child(); exit(retval); } }
void singularity_fork_run(void) { int tmpstatus; int retval = 0; pid_t child; if ( ( child = singularity_fork() ) > 0 ) { singularity_message(DEBUG, "Waiting on child process\n"); waitpid(child, &tmpstatus, 0); retval = WEXITSTATUS(tmpstatus); exit(retval); } return; }
int singularity_fork_exec(char **argv) { int tmpstatus; int retval = 0; pid_t child; child = singularity_fork(); if ( child == 0 ) { if ( execvp(argv[0], argv) < 0 ) { //Flawfinder: ignore singularity_message(ERROR, "Failed to execv(%s, ...): %s\n", argv[0], strerror(errno)); ABORT(255); } } else if ( child > 0 ) { singularity_message(DEBUG, "Waiting on child process\n"); waitpid(child, &tmpstatus, 0); retval = WEXITSTATUS(tmpstatus); } return(retval); }
int singularity_fork_daemonize(unsigned int flags) { pid_t child; child = singularity_fork(flags); if ( child == 0 ) { return(0); } else if ( child > 0 ) { singularity_message(DEBUG, "Successfully spawned daemon, waiting for signal_go_ahead from child\n"); int code = singularity_wait_for_go_ahead(); if ( code == 0 ) { exit(0); } else { singularity_message(ERROR, "Daemon failed to start\n"); ABORT(code); } } singularity_message(ERROR, "Reached unreachable code. How did you get here?\n"); ABORT(255); return(0); }