return count;
}
-static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) {
+static int exec_process(char * const *argv, int start_fd, size_t n_fds) {
_cleanup_strv_free_ char **envp = NULL;
int r;
+ assert(!strv_isempty(argv));
+ assert(start_fd >= 0);
+ assert(n_fds > 0);
+
if (arg_inetd && n_fds != 1)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"--inetd only supported for single file descriptors.");
if (!joined)
return log_oom();
- log_info("Execing %s (%s)", name, joined);
- execvpe(name, argv, envp);
+ log_info("Executing: %s", joined);
+ execvpe(argv[0], argv, envp);
- return log_error_errno(errno, "Failed to execp %s (%s): %m", name, joined);
+ return log_error_errno(errno, "Failed to execute '%s': %m", joined);
}
-static int fork_and_exec_process(const char *child, char **argv, int fd) {
+static int fork_and_exec_process(char * const *argv, int fd) {
_cleanup_free_ char *joined = NULL;
pid_t child_pid;
int r;
+ assert(!strv_isempty(argv));
+ assert(fd >= 0);
+
joined = strv_join(argv, " ");
if (!joined)
return log_oom();
return r;
if (r == 0) {
/* In the child */
- exec_process(child, argv, fd, 1);
+ (void) exec_process(argv, fd, 1);
_exit(EXIT_FAILURE);
}
- log_info("Spawned %s (%s) as PID " PID_FMT ".", child, joined, child_pid);
+ log_info("Spawned '%s' as PID " PID_FMT ".", joined, child_pid);
return 0;
}
-static int do_accept(const char *name, char **argv, int fd) {
+static int do_accept(char * const *argv, int fd) {
_cleanup_free_ char *local = NULL, *peer = NULL;
_cleanup_close_ int fd_accepted = -EBADF;
(void) getpeername_pretty(fd_accepted, true, &peer);
log_info("Connection from %s to %s", strna(peer), strna(local));
- return fork_and_exec_process(name, argv, fd_accepted);
+ return fork_and_exec_process(argv, fd_accepted);
}
/* SIGCHLD handler. */
log_info("Communication attempt on fd %i.", event.data.fd);
if (arg_accept) {
- r = do_accept(exec_argv[0], exec_argv, event.data.fd);
+ r = do_accept(exec_argv, event.data.fd);
if (r < 0)
return r;
} else
break;
}
- return exec_process(exec_argv[0], exec_argv, SD_LISTEN_FDS_START, (size_t) n);
+ return exec_process(exec_argv, SD_LISTEN_FDS_START, (size_t) n);
}
DEFINE_MAIN_FUNCTION(run);