From b8edcf52b0fb5e1502397c88929868bc79dac1ec Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 22 Jan 2021 18:29:21 +0100 Subject: [PATCH] Simplify process_wait() The function process_wait() returned a bool (true if the process terminated successfully) and provided the exit code via an output parameter exit_code. But the returned value was always equivalent to exit_code == 0, so just return the exit code instead. --- app/src/file_handler.c | 2 +- app/src/server.c | 4 ++-- app/src/sys/unix/process.c | 25 +++++++++++-------------- app/src/sys/win/process.c | 23 ++++++++++------------- app/src/util/process.c | 4 ++-- app/src/util/process.h | 8 ++++---- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/app/src/file_handler.c b/app/src/file_handler.c index 3ad92c05..930fd218 100644 --- a/app/src/file_handler.c +++ b/app/src/file_handler.c @@ -178,7 +178,7 @@ file_handler_stop(struct file_handler *file_handler) { if (!process_terminate(file_handler->current_process)) { LOGW("Could not terminate install process"); } - process_wait(file_handler->current_process, NULL); + process_wait(file_handler->current_process); // ignore exit code file_handler->current_process = PROCESS_NONE; } mutex_unlock(file_handler->mutex); diff --git a/app/src/server.c b/app/src/server.c index 841af82f..c5982b18 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -391,7 +391,7 @@ server_init(struct server *server) { static int run_wait_server(void *data) { struct server *server = data; - process_wait_noclose(server->process, NULL); // ignore exit code + process_wait_noclose(server->process); // ignore exit code mutex_lock(server->mutex); server->process_terminated = true; @@ -447,7 +447,7 @@ server_start(struct server *server, const char *serial, SDL_CreateThread(run_wait_server, "wait-server", server); if (!server->wait_server_thread) { process_terminate(server->process); - process_wait(server->process, NULL); // ignore exit code + process_wait(server->process); // ignore exit code goto error2; } diff --git a/app/src/sys/unix/process.c b/app/src/sys/unix/process.c index 3bb55010..2d1d0ff7 100644 --- a/app/src/sys/unix/process.c +++ b/app/src/sys/unix/process.c @@ -121,8 +121,8 @@ process_terminate(pid_t pid) { return kill(pid, SIGTERM) != -1; } -static bool -process_wait_internal(pid_t pid, int *exit_code, bool close) { +static exit_code_t +process_wait_internal(pid_t pid, bool close) { int code; int options = WEXITED; if (!close) { @@ -133,29 +133,26 @@ process_wait_internal(pid_t pid, int *exit_code, bool close) { int r = waitid(P_PID, pid, &info, options); if (r == -1 || info.si_code != CLD_EXITED) { // could not wait, or exited unexpectedly, probably by a signal - code = -1; + code = NO_EXIT_CODE; } else { code = info.si_status; } - if (exit_code) { - *exit_code = code; - } - return !code; + return code; } -bool -process_wait(pid_t pid, int *exit_code) { - return process_wait_internal(pid, exit_code, true); +exit_code_t +process_wait(pid_t pid) { + return process_wait_internal(pid, true); } -bool -process_wait_noclose(pid_t pid, int *exit_code) { - return process_wait_internal(pid, exit_code, false); +exit_code_t +process_wait_noclose(pid_t pid) { + return process_wait_internal(pid, false); } void process_close(pid_t pid) { - process_wait_internal(pid, NULL, true); + process_wait_internal(pid, true); // ignore exit code } char * diff --git a/app/src/sys/win/process.c b/app/src/sys/win/process.c index f087625c..bb5d9bc6 100644 --- a/app/src/sys/win/process.c +++ b/app/src/sys/win/process.c @@ -59,31 +59,28 @@ process_terminate(HANDLE handle) { return TerminateProcess(handle, 1); } -static bool -process_wait_internal(HANDLE handle, DWORD *exit_code, bool close) { +static exit_code_t +process_wait_internal(HANDLE handle, bool close) { DWORD code; if (WaitForSingleObject(handle, INFINITE) != WAIT_OBJECT_0 || !GetExitCodeProcess(handle, &code)) { // could not wait or retrieve the exit code - code = -1; // max value, it's unsigned - } - if (exit_code) { - *exit_code = code; + code = NO_EXIT_CODE; // max value, it's unsigned } if (close) { CloseHandle(handle); } - return !code; + return code; } -bool -process_wait(HANDLE handle, DWORD *exit_code) { - return process_wait_internal(handle, exit_code, true); +exit_code_t +process_wait(HANDLE handle) { + return process_wait_internal(handle, true); } -bool -process_wait_noclose(HANDLE handle, DWORD *exit_code) { - return process_wait_internal(handle, exit_code, false); +exit_code_t +process_wait_noclose(HANDLE handle) { + return process_wait_internal(handle, false); } void diff --git a/app/src/util/process.c b/app/src/util/process.c index e485ce17..e9d71d86 100644 --- a/app/src/util/process.c +++ b/app/src/util/process.c @@ -8,8 +8,8 @@ process_check_success(process_t proc, const char *name) { LOGE("Could not execute \"%s\"", name); return false; } - exit_code_t exit_code; - if (!process_wait(proc, &exit_code)) { + exit_code_t exit_code = process_wait(proc); + if (exit_code) { if (exit_code != NO_EXIT_CODE) { LOGE("\"%s\" returned with value %" PRIexitcode, name, exit_code); } else { diff --git a/app/src/util/process.h b/app/src/util/process.h index 46e481bb..e199e317 100644 --- a/app/src/util/process.h +++ b/app/src/util/process.h @@ -47,12 +47,12 @@ bool process_terminate(process_t pid); // wait and close the process (like waitpid()) -bool -process_wait(process_t pid, exit_code_t *exit_code); +exit_code_t +process_wait(process_t pid); // wait (but does not close) the process (waitid() with WNOWAIT) -bool -process_wait_noclose(process_t pid, exit_code_t *exit_code); +exit_code_t +process_wait_noclose(process_t pid); // close the process //