sway/output: Improve logging of swaybg execvp failure and more checks

This doesn't catch the error if a background changing command is
executed via swaymsg, but improves logging.
The additional checks at least propagate if e.g. forking failed.
This commit is contained in:
Tamino Bauknecht 2023-12-12 22:54:31 +01:00 committed by Simon Ser
parent e39b0b816b
commit c8676fad54
2 changed files with 10 additions and 4 deletions

View file

@ -111,7 +111,10 @@ struct cmd_results *cmd_output(int argc, char **argv) {
if (!config->reloading && !config->validating) { if (!config->reloading && !config->validating) {
apply_output_config_to_outputs(output); apply_output_config_to_outputs(output);
if (background) { if (background) {
spawn_swaybg(); if (!spawn_swaybg()) {
return cmd_results_new(CMD_FAILURE,
"Failed to apply background configuration");
}
} }
} }

View file

@ -822,7 +822,9 @@ static bool _spawn_swaybg(char **command) {
setenv("WAYLAND_SOCKET", wayland_socket_str, true); setenv("WAYLAND_SOCKET", wayland_socket_str, true);
execvp(command[0], command); execvp(command[0], command);
sway_log_errno(SWAY_ERROR, "execvp failed"); sway_log_errno(SWAY_ERROR, "failed to execute '%s' "
"(background configuration probably not applied)",
command[0]);
_exit(EXIT_FAILURE); _exit(EXIT_FAILURE);
} }
_exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS);
@ -832,12 +834,13 @@ static bool _spawn_swaybg(char **command) {
sway_log_errno(SWAY_ERROR, "close failed"); sway_log_errno(SWAY_ERROR, "close failed");
return false; return false;
} }
if (waitpid(pid, NULL, 0) < 0) { int fork_status = 0;
if (waitpid(pid, &fork_status, 0) < 0) {
sway_log_errno(SWAY_ERROR, "waitpid failed"); sway_log_errno(SWAY_ERROR, "waitpid failed");
return false; return false;
} }
return true; return WIFEXITED(fork_status) && WEXITSTATUS(fork_status) == EXIT_SUCCESS;
} }
bool spawn_swaybg(void) { bool spawn_swaybg(void) {