From 221a8b40de66b9e2edb90edaa35c3b6960c72705 Mon Sep 17 00:00:00 2001 From: Manuel Stoeckl Date: Sat, 21 Dec 2019 15:52:48 -0500 Subject: [PATCH] Have commands return cmd_results on the stack sway commands are implemented using functions that return an error code and (if the function was not successful) an error string. The two are bundled together by the type `struct cmd_results`. This patch alters the command handler prototype so that the cmd_results objects are returned by value (on the stack), instead of by a pointer to a heap allocated instance of a cmd_results. The latter method had the flaw that, if the heap allocation of the cmd_results object failed, the exact return code would be lost. Furthermore, for some command handlers (such as those in sway/commands/output), returning NULL signified success, so an allocation failure could lead to an ignored error. This change prevents both classes of errors. --- include/sway/commands.h | 20 ++-- sway/commands.c | 105 +++++++++++--------- sway/commands/assign.c | 6 +- sway/commands/bar.c | 10 +- sway/commands/bar/bind.c | 20 ++-- sway/commands/bar/binding_mode_indicator.c | 8 +- sway/commands/bar/colors.c | 46 ++++----- sway/commands/bar/font.c | 6 +- sway/commands/bar/gaps.c | 8 +- sway/commands/bar/height.c | 6 +- sway/commands/bar/hidden_state.c | 26 ++--- sway/commands/bar/icon_theme.c | 6 +- sway/commands/bar/id.c | 6 +- sway/commands/bar/mode.c | 26 ++--- sway/commands/bar/modifier.c | 6 +- sway/commands/bar/output.c | 6 +- sway/commands/bar/pango_markup.c | 6 +- sway/commands/bar/position.c | 6 +- sway/commands/bar/separator_symbol.c | 6 +- sway/commands/bar/status_command.c | 6 +- sway/commands/bar/status_edge_padding.c | 6 +- sway/commands/bar/status_padding.c | 6 +- sway/commands/bar/strip_workspace_name.c | 8 +- sway/commands/bar/strip_workspace_numbers.c | 8 +- sway/commands/bar/swaybar_command.c | 6 +- sway/commands/bar/tray_bind.c | 10 +- sway/commands/bar/tray_output.c | 6 +- sway/commands/bar/tray_padding.c | 8 +- sway/commands/bar/workspace_buttons.c | 6 +- sway/commands/bar/wrap_scroll.c | 6 +- sway/commands/bind.c | 51 +++++----- sway/commands/border.c | 6 +- sway/commands/client.c | 16 +-- sway/commands/create_output.c | 2 +- sway/commands/default_border.c | 6 +- sway/commands/default_floating_border.c | 8 +- sway/commands/default_orientation.c | 6 +- sway/commands/exec.c | 2 +- sway/commands/exec_always.c | 8 +- sway/commands/exit.c | 6 +- sway/commands/floating.c | 6 +- sway/commands/floating_minmax_size.c | 10 +- sway/commands/floating_modifier.c | 6 +- sway/commands/focus.c | 10 +- sway/commands/focus_follows_mouse.c | 6 +- sway/commands/focus_on_window_activation.c | 8 +- sway/commands/focus_wrapping.c | 6 +- sway/commands/font.c | 6 +- sway/commands/for_window.c | 6 +- sway/commands/force_display_urgency_hint.c | 8 +- sway/commands/force_focus_wrapping.c | 7 +- sway/commands/fullscreen.c | 6 +- sway/commands/gaps.c | 18 ++-- sway/commands/hide_edge_borders.c | 6 +- sway/commands/include.c | 6 +- sway/commands/inhibit_idle.c | 6 +- sway/commands/input.c | 14 ++- sway/commands/input/accel_profile.c | 6 +- sway/commands/input/calibration_matrix.c | 6 +- sway/commands/input/click_method.c | 6 +- sway/commands/input/drag.c | 6 +- sway/commands/input/drag_lock.c | 6 +- sway/commands/input/dwt.c | 6 +- sway/commands/input/events.c | 6 +- sway/commands/input/left_handed.c | 6 +- sway/commands/input/map_from_region.c | 6 +- sway/commands/input/map_to_output.c | 6 +- sway/commands/input/map_to_region.c | 6 +- sway/commands/input/middle_emulation.c | 6 +- sway/commands/input/natural_scroll.c | 6 +- sway/commands/input/pointer_accel.c | 6 +- sway/commands/input/repeat_delay.c | 6 +- sway/commands/input/repeat_rate.c | 6 +- sway/commands/input/scroll_button.c | 6 +- sway/commands/input/scroll_factor.c | 6 +- sway/commands/input/scroll_method.c | 6 +- sway/commands/input/tap.c | 6 +- sway/commands/input/tap_button_map.c | 6 +- sway/commands/input/xkb_capslock.c | 6 +- sway/commands/input/xkb_file.c | 6 +- sway/commands/input/xkb_layout.c | 6 +- sway/commands/input/xkb_model.c | 6 +- sway/commands/input/xkb_numlock.c | 6 +- sway/commands/input/xkb_options.c | 6 +- sway/commands/input/xkb_rules.c | 6 +- sway/commands/input/xkb_switch_layout.c | 6 +- sway/commands/input/xkb_variant.c | 6 +- sway/commands/kill.c | 2 +- sway/commands/layout.c | 6 +- sway/commands/mark.c | 6 +- sway/commands/max_render_time.c | 2 +- sway/commands/mode.c | 8 +- sway/commands/mouse_warping.c | 6 +- sway/commands/move.c | 28 +++--- sway/commands/new_float.c | 2 +- sway/commands/new_window.c | 2 +- sway/commands/no_focus.c | 6 +- sway/commands/nop.c | 2 +- sway/commands/opacity.c | 6 +- sway/commands/output.c | 10 +- sway/commands/output/background.c | 6 +- sway/commands/output/disable.c | 4 +- sway/commands/output/dpms.c | 4 +- sway/commands/output/enable.c | 4 +- sway/commands/output/max_render_time.c | 4 +- sway/commands/output/mode.c | 4 +- sway/commands/output/position.c | 4 +- sway/commands/output/scale.c | 4 +- sway/commands/output/scale_filter.c | 4 +- sway/commands/output/subpixel.c | 4 +- sway/commands/output/toggle.c | 4 +- sway/commands/output/transform.c | 7 +- sway/commands/popup_during_fullscreen.c | 8 +- sway/commands/reload.c | 6 +- sway/commands/rename.c | 6 +- sway/commands/resize.c | 22 ++-- sway/commands/scratchpad.c | 6 +- sway/commands/seat.c | 20 ++-- sway/commands/seat/attach.c | 6 +- sway/commands/seat/cursor.c | 40 ++++---- sway/commands/seat/fallback.c | 6 +- sway/commands/seat/hide_cursor.c | 6 +- sway/commands/seat/idle.c | 12 +-- sway/commands/seat/keyboard_grouping.c | 6 +- sway/commands/seat/pointer_constraint.c | 6 +- sway/commands/seat/xcursor_theme.c | 8 +- sway/commands/set.c | 6 +- sway/commands/show_marks.c | 6 +- sway/commands/smart_borders.c | 6 +- sway/commands/smart_gaps.c | 7 +- sway/commands/split.c | 26 ++--- sway/commands/sticky.c | 6 +- sway/commands/swap.c | 21 ++-- sway/commands/swaybg_command.c | 6 +- sway/commands/swaynag_command.c | 6 +- sway/commands/tiling_drag.c | 6 +- sway/commands/tiling_drag_threshold.c | 6 +- sway/commands/title_align.c | 6 +- sway/commands/title_format.c | 6 +- sway/commands/titlebar_border_thickness.c | 6 +- sway/commands/titlebar_padding.c | 6 +- sway/commands/unmark.c | 2 +- sway/commands/urgent.c | 6 +- sway/commands/workspace.c | 24 ++--- sway/commands/workspace_layout.c | 6 +- sway/commands/ws_auto_back_and_forth.c | 6 +- sway/commands/xwayland.c | 6 +- sway/config.c | 11 +- sway/ipc-server.c | 8 +- sway/tree/view.c | 3 +- 150 files changed, 667 insertions(+), 659 deletions(-) diff --git a/include/sway/commands.h b/include/sway/commands.h index 982125c19..20a5344db 100644 --- a/include/sway/commands.h +++ b/include/sway/commands.h @@ -6,7 +6,7 @@ struct sway_container; -typedef struct cmd_results *sway_cmd(int argc, char **argv); +typedef struct cmd_results sway_cmd(int argc, char **argv); struct cmd_handler { char *command; @@ -43,7 +43,7 @@ enum expected_args { EXPECTED_EQUAL_TO }; -struct cmd_results *checkarg(int argc, const char *name, +bool checkarg(struct cmd_results *error, int argc, const char *name, enum expected_args type, int val); struct cmd_handler *find_handler(char *line, struct cmd_handler *cmd_handlers, @@ -63,24 +63,24 @@ list_t *execute_command(char *command, struct sway_seat *seat, * * Do not use this under normal conditions. */ -struct cmd_results *config_command(char *command, char **new_block); +struct cmd_results config_command(char *command, char **new_block); /** * Parse and handle a sub command */ -struct cmd_results *config_subcommand(char **argv, int argc, +struct cmd_results config_subcommand(char **argv, int argc, struct cmd_handler *handlers, size_t handlers_size); /* * Parses a command policy rule. */ -struct cmd_results *config_commands_command(char *exec); +struct cmd_results config_commands_command(char *exec); /** - * Allocates a cmd_results object. + * Fills in and returns a cmd_results object. */ -struct cmd_results *cmd_results_new(enum cmd_status status, const char *error, ...); +struct cmd_results cmd_results_new(enum cmd_status status, const char *error, ...); /** - * Frees a cmd_results object. + * Frees the contents of a cmd_results object. */ -void free_cmd_results(struct cmd_results *results); +void free_cmd_results(struct cmd_results results); /** * Serializes a list of cmd_results to a JSON string. * @@ -88,7 +88,7 @@ void free_cmd_results(struct cmd_results *results); */ char *cmd_results_to_json(list_t *res_list); -struct cmd_results *add_color(char *buffer, const char *color); +struct cmd_results add_color(char *buffer, const char *color); /** * TODO: Move this function and its dependent functions to container.c. diff --git a/sway/commands.c b/sway/commands.c index e7f1eafe7..b7fa1e863 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -16,8 +16,9 @@ #include "stringop.h" #include "log.h" -// Returns error object, or NULL if check succeeds. -struct cmd_results *checkarg(int argc, const char *name, enum expected_args type, int val) { +// Returns true and sets error object, or false if check succeeds. +bool checkarg(struct cmd_results *error, int argc, const char *name, + enum expected_args type, int val) { const char *error_name = NULL; switch (type) { case EXPECTED_AT_LEAST: @@ -35,11 +36,13 @@ struct cmd_results *checkarg(int argc, const char *name, enum expected_args type error_name = ""; } } - return error_name ? - cmd_results_new(CMD_INVALID, "Invalid %s command " - "(expected %s%d argument%s, got %d)", - name, error_name, val, val != 1 ? "s" : "", argc) - : NULL; + if (error_name) { + *error = cmd_results_new(CMD_INVALID, "Invalid %s command " + "(expected %s%d argument%s, got %d)", name, error_name, + val, val != 1 ? "s" : "", argc); + return true; + } + return false; } /* Keep alphabetized */ @@ -230,8 +233,15 @@ list_t *execute_command(char *_exec, struct sway_seat *seat, char *error = NULL; struct criteria *criteria = criteria_parse(head, &error); if (!criteria) { - list_add(res_list, - cmd_results_new(CMD_INVALID, "%s", error)); + struct cmd_results *res = malloc(sizeof(struct cmd_results)); + if (!res) { + sway_log(SWAY_ERROR, + "Failed to allocate command results"); + free(error); + goto cleanup; + } + *res = cmd_results_new(CMD_INVALID, "%s", error); + list_add(res_list, res); free(error); goto cleanup; } @@ -265,10 +275,18 @@ list_t *execute_command(char *_exec, struct sway_seat *seat, } } } + struct cmd_results *res = malloc(sizeof(struct cmd_results)); + if (!res) { + sway_log(SWAY_ERROR, "Failed to allocate command results"); + free_argv(argc, argv); + goto cleanup; + } + struct cmd_handler *handler = find_core_handler(argv[0]); if (!handler) { - list_add(res_list, cmd_results_new(CMD_INVALID, - "Unknown/invalid command '%s'", argv[0])); + *res = cmd_results_new(CMD_INVALID, + "Unknown/invalid command '%s'", argv[0]); + list_add(res_list, res); free_argv(argc, argv); goto cleanup; } @@ -283,38 +301,38 @@ list_t *execute_command(char *_exec, struct sway_seat *seat, struct sway_node *node = con ? &con->node : seat_get_focus_inactive(seat, &root->node); set_config_node(node); - struct cmd_results *res = handler->handle(argc-1, argv+1); + *res = handler->handle(argc-1, argv+1); list_add(res_list, res); if (res->status == CMD_INVALID) { free_argv(argc, argv); goto cleanup; } } else if (views->length == 0) { - list_add(res_list, - cmd_results_new(CMD_FAILURE, "No matching node.")); + *res = cmd_results_new(CMD_FAILURE, "No matching node."); + list_add(res_list, res); } else { - struct cmd_results *fail_res = NULL; + struct cmd_results fail_res = cmd_results_new(CMD_SUCCESS, NULL); for (int i = 0; i < views->length; ++i) { struct sway_view *view = views->items[i]; set_config_node(&view->container->node); - struct cmd_results *res = handler->handle(argc-1, argv+1); - if (res->status == CMD_SUCCESS) { - free_cmd_results(res); + struct cmd_results hres = handler->handle(argc-1, argv+1); + if (hres.status == CMD_SUCCESS) { + free_cmd_results(hres); } else { // last failure will take precedence - if (fail_res) { - free_cmd_results(fail_res); - } - fail_res = res; - if (res->status == CMD_INVALID) { - list_add(res_list, fail_res); + free_cmd_results(fail_res); + fail_res = hres; + if (hres.status == CMD_INVALID) { + *res = fail_res; + list_add(res_list, res); free_argv(argc, argv); goto cleanup; } } } - list_add(res_list, - fail_res ? fail_res : cmd_results_new(CMD_SUCCESS, NULL)); + + *res = fail_res; + list_add(res_list, res); } free_argv(argc, argv); } while(head); @@ -331,8 +349,8 @@ cleanup: // be chained together) // 4) execute_command handles all state internally while config_command has // some state handled outside (notably the block mode, in read_config) -struct cmd_results *config_command(char *exec, char **new_block) { - struct cmd_results *results = NULL; +struct cmd_results config_command(char *exec, char **new_block) { + struct cmd_results results; int argc; char **argv = split_args(exec, &argc); @@ -417,7 +435,7 @@ cleanup: return results; } -struct cmd_results *config_subcommand(char **argv, int argc, +struct cmd_results config_subcommand(char **argv, int argc, struct cmd_handler *handlers, size_t handlers_size) { char *command = join_args(argv, argc); sway_log(SWAY_DEBUG, "Subcommand: %s", command); @@ -436,8 +454,8 @@ struct cmd_results *config_subcommand(char **argv, int argc, "The command '%s' is shimmed, but unimplemented", argv[0]); } -struct cmd_results *config_commands_command(char *exec) { - struct cmd_results *results = NULL; +struct cmd_results config_commands_command(char *exec) { + struct cmd_results results; int argc; char **argv = split_args(exec, &argc); if (!argc) { @@ -517,14 +535,10 @@ cleanup: return results; } -struct cmd_results *cmd_results_new(enum cmd_status status, +struct cmd_results cmd_results_new(enum cmd_status status, const char *format, ...) { - struct cmd_results *results = malloc(sizeof(struct cmd_results)); - if (!results) { - sway_log(SWAY_ERROR, "Unable to allocate command results"); - return NULL; - } - results->status = status; + struct cmd_results results; + results.status = status; if (format) { char *error = malloc(256); va_list args; @@ -533,18 +547,15 @@ struct cmd_results *cmd_results_new(enum cmd_status status, vsnprintf(error, 256, format, args); } va_end(args); - results->error = error; + results.error = error; } else { - results->error = NULL; + results.error = NULL; } return results; } -void free_cmd_results(struct cmd_results *results) { - if (results->error) { - free(results->error); - } - free(results); +void free_cmd_results(struct cmd_results results) { + free(results.error); } char *cmd_results_to_json(list_t *res_list) { @@ -573,7 +584,7 @@ char *cmd_results_to_json(list_t *res_list) { * * return error object, or NULL if color is valid. */ -struct cmd_results *add_color(char *buffer, const char *color) { +struct cmd_results add_color(char *buffer, const char *color) { int len = strlen(color); if (len != 7 && len != 9) { return cmd_results_new(CMD_INVALID, @@ -596,5 +607,5 @@ struct cmd_results *add_color(char *buffer, const char *color) { buffer[8] = 'f'; } buffer[9] = '\0'; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/assign.c b/sway/commands/assign.c index 976bc3cc5..f074ceeed 100644 --- a/sway/commands/assign.c +++ b/sway/commands/assign.c @@ -7,9 +7,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_assign(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "assign", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_assign(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "assign", EXPECTED_AT_LEAST, 2)) { return error; } diff --git a/sway/commands/bar.c b/sway/commands/bar.c index 7370910d2..718e42438 100644 --- a/sway/commands/bar.c +++ b/sway/commands/bar.c @@ -51,9 +51,9 @@ static bool is_subcommand(char *name) { find_handler(name, bar_config_handlers, sizeof(bar_config_handlers)); } -struct cmd_results *cmd_bar(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "bar", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_bar(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "bar", EXPECTED_AT_LEAST, 2)) { return error; } @@ -98,7 +98,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) { config->current_bar->id = id; } - struct cmd_results *res = NULL; + struct cmd_results res; if (find_handler(argv[0], bar_config_handlers, sizeof(bar_config_handlers))) { if (config->reading) { @@ -112,7 +112,7 @@ struct cmd_results *cmd_bar(int argc, char **argv) { res = config_subcommand(argv, argc, bar_handlers, sizeof(bar_handlers)); } - if (res && res->status != CMD_SUCCESS) { + if (res.status != CMD_SUCCESS) { if (id) { free_bar_config(config->current_bar); id = NULL; diff --git a/sway/commands/bar/bind.c b/sway/commands/bar/bind.c index b4b5bc459..e1554bdea 100644 --- a/sway/commands/bar/bind.c +++ b/sway/commands/bar/bind.c @@ -9,7 +9,7 @@ #include "log.h" #include "stringop.h" -static struct cmd_results *binding_add(struct bar_binding *binding, +static struct cmd_results binding_add(struct bar_binding *binding, list_t *mode_bindings) { const char *name = get_mouse_button_name(binding->button); bool overwritten = false; @@ -35,7 +35,7 @@ static struct cmd_results *binding_add(struct bar_binding *binding, return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *binding_remove(struct bar_binding *binding, +static struct cmd_results binding_remove(struct bar_binding *binding, list_t *mode_bindings) { const char *name = get_mouse_button_name(binding->button); for (int i = 0; i < mode_bindings->length; i++) { @@ -52,7 +52,7 @@ static struct cmd_results *binding_remove(struct bar_binding *binding, } } - struct cmd_results *error = cmd_results_new(CMD_FAILURE, "Could not " + struct cmd_results error = cmd_results_new(CMD_FAILURE, "Could not " "find binding for [bar %s]" " Button %u (%s)%s", config->current_bar->id, binding->button, name, binding->release ? " - release" : ""); @@ -60,7 +60,7 @@ static struct cmd_results *binding_remove(struct bar_binding *binding, return error; } -static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code, +static struct cmd_results bar_cmd_bind(int argc, char **argv, bool code, bool unbind) { int minargs = 2; const char *command; @@ -71,8 +71,8 @@ static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code, command = code ? "bar bindcode" : "bar bindsym"; } - struct cmd_results *error = NULL; - if ((error = checkarg(argc, command, EXPECTED_AT_LEAST, minargs))) { + struct cmd_results error; + if (checkarg(&error, argc, command, EXPECTED_AT_LEAST, minargs)) { return error; } @@ -112,18 +112,18 @@ static struct cmd_results *bar_cmd_bind(int argc, char **argv, bool code, return binding_add(binding, bindings); } -struct cmd_results *bar_cmd_bindcode(int argc, char **argv) { +struct cmd_results bar_cmd_bindcode(int argc, char **argv) { return bar_cmd_bind(argc, argv, true, false); } -struct cmd_results *bar_cmd_bindsym(int argc, char **argv) { +struct cmd_results bar_cmd_bindsym(int argc, char **argv) { return bar_cmd_bind(argc, argv, false, false); } -struct cmd_results *bar_cmd_unbindcode(int argc, char **argv) { +struct cmd_results bar_cmd_unbindcode(int argc, char **argv) { return bar_cmd_bind(argc, argv, true, true); } -struct cmd_results *bar_cmd_unbindsym(int argc, char **argv) { +struct cmd_results bar_cmd_unbindsym(int argc, char **argv) { return bar_cmd_bind(argc, argv, false, true); } diff --git a/sway/commands/bar/binding_mode_indicator.c b/sway/commands/bar/binding_mode_indicator.c index b58d8a838..791f5a079 100644 --- a/sway/commands/bar/binding_mode_indicator.c +++ b/sway/commands/bar/binding_mode_indicator.c @@ -4,10 +4,10 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_binding_mode_indicator(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, - "binding_mode_indicator", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_binding_mode_indicator(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, + "binding_mode_indicator", EXPECTED_EQUAL_TO, 1)) { return error; } config->current_bar->binding_mode_indicator = diff --git a/sway/commands/bar/colors.c b/sway/commands/bar/colors.c index 7921db0de..d3a7e3b19 100644 --- a/sway/commands/bar/colors.c +++ b/sway/commands/bar/colors.c @@ -16,47 +16,43 @@ static struct cmd_handler bar_colors_handlers[] = { { "urgent_workspace", bar_colors_cmd_urgent_workspace }, }; -static struct cmd_results *parse_single_color(char **color, +static struct cmd_results parse_single_color(char **color, const char *cmd_name, int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, cmd_name, EXPECTED_EQUAL_TO, 1))) { + struct cmd_results error; + if (checkarg(&error, argc, cmd_name, EXPECTED_EQUAL_TO, 1)) { return error; } if (!*color && !(*color = malloc(10))) { - return NULL; + return cmd_results_new(CMD_FAILURE, "Allocation failure"); } - error = add_color(*color, argv[0]); - if (error) { - return error; - } - return cmd_results_new(CMD_SUCCESS, NULL); + return add_color(*color, argv[0]); } -static struct cmd_results *parse_three_colors(char ***colors, +static struct cmd_results parse_three_colors(char ***colors, const char *cmd_name, int argc, char **argv) { - struct cmd_results *error = NULL; + struct cmd_results error; if (argc != 3) { return cmd_results_new(CMD_INVALID, "Command '%s' requires exactly three color values", cmd_name); } for (size_t i = 0; i < 3; i++) { if (!*colors[i] && !(*(colors[i]) = malloc(10))) { - return NULL; + return cmd_results_new(CMD_FAILURE, "Allocation failure"); } error = add_color(*(colors[i]), argv[i]); - if (error) { + if (error.status != CMD_SUCCESS) { return error; } } return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *bar_cmd_colors(int argc, char **argv) { +struct cmd_results bar_cmd_colors(int argc, char **argv) { return config_subcommand(argv, argc, bar_colors_handlers, sizeof(bar_colors_handlers)); } -struct cmd_results *bar_colors_cmd_active_workspace(int argc, char **argv) { +struct cmd_results bar_colors_cmd_active_workspace(int argc, char **argv) { char **colors[3] = { &(config->current_bar->colors.active_workspace_border), &(config->current_bar->colors.active_workspace_bg), @@ -65,17 +61,17 @@ struct cmd_results *bar_colors_cmd_active_workspace(int argc, char **argv) { return parse_three_colors(colors, "active_workspace", argc, argv); } -struct cmd_results *bar_colors_cmd_background(int argc, char **argv) { +struct cmd_results bar_colors_cmd_background(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.background), "background", argc, argv); } -struct cmd_results *bar_colors_cmd_focused_background(int argc, char **argv) { +struct cmd_results bar_colors_cmd_focused_background(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.focused_background), "focused_background", argc, argv); } -struct cmd_results *bar_colors_cmd_binding_mode(int argc, char **argv) { +struct cmd_results bar_colors_cmd_binding_mode(int argc, char **argv) { char **colors[3] = { &(config->current_bar->colors.binding_mode_border), &(config->current_bar->colors.binding_mode_bg), @@ -84,7 +80,7 @@ struct cmd_results *bar_colors_cmd_binding_mode(int argc, char **argv) { return parse_three_colors(colors, "binding_mode", argc, argv); } -struct cmd_results *bar_colors_cmd_focused_workspace(int argc, char **argv) { +struct cmd_results bar_colors_cmd_focused_workspace(int argc, char **argv) { char **colors[3] = { &(config->current_bar->colors.focused_workspace_border), &(config->current_bar->colors.focused_workspace_bg), @@ -93,7 +89,7 @@ struct cmd_results *bar_colors_cmd_focused_workspace(int argc, char **argv) { return parse_three_colors(colors, "focused_workspace", argc, argv); } -struct cmd_results *bar_colors_cmd_inactive_workspace(int argc, char **argv) { +struct cmd_results bar_colors_cmd_inactive_workspace(int argc, char **argv) { char **colors[3] = { &(config->current_bar->colors.inactive_workspace_border), &(config->current_bar->colors.inactive_workspace_bg), @@ -102,27 +98,27 @@ struct cmd_results *bar_colors_cmd_inactive_workspace(int argc, char **argv) { return parse_three_colors(colors, "inactive_workspace", argc, argv); } -struct cmd_results *bar_colors_cmd_separator(int argc, char **argv) { +struct cmd_results bar_colors_cmd_separator(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.separator), "separator", argc, argv); } -struct cmd_results *bar_colors_cmd_focused_separator(int argc, char **argv) { +struct cmd_results bar_colors_cmd_focused_separator(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.focused_separator), "focused_separator", argc, argv); } -struct cmd_results *bar_colors_cmd_statusline(int argc, char **argv) { +struct cmd_results bar_colors_cmd_statusline(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.statusline), "statusline", argc, argv); } -struct cmd_results *bar_colors_cmd_focused_statusline(int argc, char **argv) { +struct cmd_results bar_colors_cmd_focused_statusline(int argc, char **argv) { return parse_single_color(&(config->current_bar->colors.focused_statusline), "focused_statusline", argc, argv); } -struct cmd_results *bar_colors_cmd_urgent_workspace(int argc, char **argv) { +struct cmd_results bar_colors_cmd_urgent_workspace(int argc, char **argv) { char **colors[3] = { &(config->current_bar->colors.urgent_workspace_border), &(config->current_bar->colors.urgent_workspace_bg), diff --git a/sway/commands/bar/font.c b/sway/commands/bar/font.c index 62987f3e3..f4cd16bad 100644 --- a/sway/commands/bar/font.c +++ b/sway/commands/bar/font.c @@ -4,9 +4,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *bar_cmd_font(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "font", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_font(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "font", EXPECTED_AT_LEAST, 1)) { return error; } char *font = join_args(argv, argc); diff --git a/sway/commands/bar/gaps.c b/sway/commands/bar/gaps.c index f99966b40..12bd31f21 100644 --- a/sway/commands/bar/gaps.c +++ b/sway/commands/bar/gaps.c @@ -5,12 +5,12 @@ #include "sway/ipc-server.h" #include "log.h" -struct cmd_results *bar_cmd_gaps(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "gaps", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_gaps(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "gaps", EXPECTED_AT_LEAST, 1)) { return error; } - if ((error = checkarg(argc, "gaps", EXPECTED_AT_MOST, 4))) { + if (checkarg(&error, argc, "gaps", EXPECTED_AT_MOST, 4)) { return error; } diff --git a/sway/commands/bar/height.c b/sway/commands/bar/height.c index 945eb7071..982e6fa01 100644 --- a/sway/commands/bar/height.c +++ b/sway/commands/bar/height.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_height(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "height", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_height(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "height", EXPECTED_EQUAL_TO, 1)) { return error; } int height = atoi(argv[0]); diff --git a/sway/commands/bar/hidden_state.c b/sway/commands/bar/hidden_state.c index 1f08a5d2e..cc6bf9a22 100644 --- a/sway/commands/bar/hidden_state.c +++ b/sway/commands/bar/hidden_state.c @@ -6,7 +6,7 @@ #include "sway/ipc-server.h" #include "log.h" -static struct cmd_results *bar_set_hidden_state(struct bar_config *bar, +static struct cmd_results bar_set_hidden_state(struct bar_config *bar, const char *hidden_state) { char *old_state = bar->hidden_state; if (strcasecmp("toggle", hidden_state) == 0 && !config->reading) { @@ -31,15 +31,15 @@ static struct cmd_results *bar_set_hidden_state(struct bar_config *bar, } // free old mode free(old_state); - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *bar_cmd_hidden_state(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "hidden_state", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_hidden_state(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "hidden_state", EXPECTED_AT_LEAST, 1)) { return error; } - if ((error = checkarg(argc, "hidden_state", EXPECTED_AT_MOST, 2))) { + if (checkarg(&error, argc, "hidden_state", EXPECTED_AT_MOST, 2)) { return error; } if (config->reading && argc > 1) { @@ -55,20 +55,22 @@ struct cmd_results *bar_cmd_hidden_state(int argc, char **argv) { const char *state = argv[0]; if (config->reading) { - error = bar_set_hidden_state(config->current_bar, state); + return bar_set_hidden_state(config->current_bar, state); } else { const char *id = argc == 2 ? argv[1] : NULL; for (int i = 0; i < config->bars->length; ++i) { struct bar_config *bar = config->bars->items[i]; if (id) { if (strcmp(id, bar->id) == 0) { - error = bar_set_hidden_state(bar, state); - break; + return bar_set_hidden_state(bar, state); + } + } else { + error = bar_set_hidden_state(bar, state); + if (error.status != CMD_SUCCESS) { + return error; } - } else if ((error = bar_set_hidden_state(bar, state))) { - break; } } + return cmd_results_new(CMD_SUCCESS, NULL); } - return error ? error : cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/bar/icon_theme.c b/sway/commands/bar/icon_theme.c index 6ac07843d..61c4f9ed3 100644 --- a/sway/commands/bar/icon_theme.c +++ b/sway/commands/bar/icon_theme.c @@ -5,10 +5,10 @@ #include "sway/config.h" #include "log.h" -struct cmd_results *bar_cmd_icon_theme(int argc, char **argv) { +struct cmd_results bar_cmd_icon_theme(int argc, char **argv) { #if HAVE_TRAY - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "icon_theme", EXPECTED_EQUAL_TO, 1))) { + struct cmd_results error; + if (checkarg(&error, argc, "icon_theme", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/id.c b/sway/commands/bar/id.c index a9a617430..ab6bec6cd 100644 --- a/sway/commands/bar/id.c +++ b/sway/commands/bar/id.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_id(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "id", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_id(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "id", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/mode.c b/sway/commands/bar/mode.c index 8b3fb275a..a838e36f1 100644 --- a/sway/commands/bar/mode.c +++ b/sway/commands/bar/mode.c @@ -6,7 +6,7 @@ #include "sway/ipc-server.h" #include "log.h" -static struct cmd_results *bar_set_mode(struct bar_config *bar, const char *mode) { +static struct cmd_results bar_set_mode(struct bar_config *bar, const char *mode) { char *old_mode = bar->mode; if (strcasecmp("toggle", mode) == 0 && !config->reading) { if (strcasecmp("dock", bar->mode) == 0) { @@ -35,15 +35,15 @@ static struct cmd_results *bar_set_mode(struct bar_config *bar, const char *mode // free old mode free(old_mode); - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *bar_cmd_mode(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "mode", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_mode(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "mode", EXPECTED_AT_LEAST, 1)) { return error; } - if ((error = checkarg(argc, "mode", EXPECTED_AT_MOST, 2))) { + if (checkarg(&error, argc, "mode", EXPECTED_AT_MOST, 2)) { return error; } if (config->reading && argc > 1) { @@ -59,20 +59,22 @@ struct cmd_results *bar_cmd_mode(int argc, char **argv) { const char *mode = argv[0]; if (config->reading) { - error = bar_set_mode(config->current_bar, mode); + return bar_set_mode(config->current_bar, mode); } else { const char *id = argc == 2 ? argv[1] : NULL; for (int i = 0; i < config->bars->length; ++i) { struct bar_config *bar = config->bars->items[i]; if (id) { if (strcmp(id, bar->id) == 0) { - error = bar_set_mode(bar, mode); - break; + return bar_set_mode(bar, mode); + } + } else { + error = bar_set_mode(bar, mode); + if (error.status != CMD_SUCCESS) { + return error; } - } else if ((error = bar_set_mode(bar, mode))) { - break; } } + return cmd_results_new(CMD_SUCCESS, NULL); } - return error ? error : cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/bar/modifier.c b/sway/commands/bar/modifier.c index 983d21795..0e29969c8 100644 --- a/sway/commands/bar/modifier.c +++ b/sway/commands/bar/modifier.c @@ -4,9 +4,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *bar_cmd_modifier(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "modifier", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_modifier(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "modifier", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/output.c b/sway/commands/bar/output.c index cac1d0568..4d1137214 100644 --- a/sway/commands/bar/output.c +++ b/sway/commands/bar/output.c @@ -5,9 +5,9 @@ #include "list.h" #include "log.h" -struct cmd_results *bar_cmd_output(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "output", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_output(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "output", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/pango_markup.c b/sway/commands/bar/pango_markup.c index ee51390da..bb45ed48b 100644 --- a/sway/commands/bar/pango_markup.c +++ b/sway/commands/bar/pango_markup.c @@ -4,9 +4,9 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_pango_markup(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "pango_markup", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_pango_markup(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "pango_markup", EXPECTED_EQUAL_TO, 1)) { return error; } config->current_bar->pango_markup = diff --git a/sway/commands/bar/position.c b/sway/commands/bar/position.c index b207de0bf..594d96da0 100644 --- a/sway/commands/bar/position.c +++ b/sway/commands/bar/position.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_position(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "position", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_position(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "position", EXPECTED_EQUAL_TO, 1)) { return error; } char *valid[] = { "top", "bottom" }; diff --git a/sway/commands/bar/separator_symbol.c b/sway/commands/bar/separator_symbol.c index 6737d4d24..9a0449f31 100644 --- a/sway/commands/bar/separator_symbol.c +++ b/sway/commands/bar/separator_symbol.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_separator_symbol(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "separator_symbol", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_separator_symbol(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "separator_symbol", EXPECTED_EQUAL_TO, 1)) { return error; } free(config->current_bar->separator_symbol); diff --git a/sway/commands/bar/status_command.c b/sway/commands/bar/status_command.c index bb92e8e07..4163d7fa3 100644 --- a/sway/commands/bar/status_command.c +++ b/sway/commands/bar/status_command.c @@ -3,9 +3,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *bar_cmd_status_command(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "status_command", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_status_command(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "status_command", EXPECTED_AT_LEAST, 1)) { return error; } free(config->current_bar->status_command); diff --git a/sway/commands/bar/status_edge_padding.c b/sway/commands/bar/status_edge_padding.c index 75ef86f09..0c4c3f09a 100644 --- a/sway/commands/bar/status_edge_padding.c +++ b/sway/commands/bar/status_edge_padding.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_status_edge_padding(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_status_edge_padding(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "status_edge_padding", EXPECTED_EQUAL_TO, 1)) { return error; } char *end; diff --git a/sway/commands/bar/status_padding.c b/sway/commands/bar/status_padding.c index 0c65e516e..efd95a64d 100644 --- a/sway/commands/bar/status_padding.c +++ b/sway/commands/bar/status_padding.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *bar_cmd_status_padding(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "status_padding", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_status_padding(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "status_padding", EXPECTED_EQUAL_TO, 1)) { return error; } char *end; diff --git a/sway/commands/bar/strip_workspace_name.c b/sway/commands/bar/strip_workspace_name.c index 764321a89..8ee651f01 100644 --- a/sway/commands/bar/strip_workspace_name.c +++ b/sway/commands/bar/strip_workspace_name.c @@ -4,10 +4,10 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_strip_workspace_name(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, - "strip_workspace_name", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_strip_workspace_name(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, + "strip_workspace_name", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/strip_workspace_numbers.c b/sway/commands/bar/strip_workspace_numbers.c index 2d7fe1a7f..9394bcb83 100644 --- a/sway/commands/bar/strip_workspace_numbers.c +++ b/sway/commands/bar/strip_workspace_numbers.c @@ -4,10 +4,10 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_strip_workspace_numbers(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, - "strip_workspace_numbers", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_strip_workspace_numbers(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, + "strip_workspace_numbers", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/swaybar_command.c b/sway/commands/bar/swaybar_command.c index 0892a898a..38729ac91 100644 --- a/sway/commands/bar/swaybar_command.c +++ b/sway/commands/bar/swaybar_command.c @@ -3,9 +3,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *bar_cmd_swaybar_command(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "swaybar_command", EXPECTED_AT_LEAST, 1))) { +struct cmd_results bar_cmd_swaybar_command(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "swaybar_command", EXPECTED_AT_LEAST, 1)) { return error; } free(config->current_bar->swaybar_command); diff --git a/sway/commands/bar/tray_bind.c b/sway/commands/bar/tray_bind.c index 243834bad..cee9addbf 100644 --- a/sway/commands/bar/tray_bind.c +++ b/sway/commands/bar/tray_bind.c @@ -5,11 +5,11 @@ #include "sway/input/cursor.h" #include "log.h" -static struct cmd_results *tray_bind(int argc, char **argv, bool code) { +static struct cmd_results tray_bind(int argc, char **argv, bool code) { #if HAVE_TRAY const char *command = code ? "bar tray_bindcode" : "bar tray_bindsym"; - struct cmd_results *error = NULL; - if ((error = checkarg(argc, command, EXPECTED_EQUAL_TO, 2))) { + struct cmd_results error; + if (checkarg(&error, argc, command, EXPECTED_EQUAL_TO, 2)) { return error; } @@ -86,10 +86,10 @@ static struct cmd_results *tray_bind(int argc, char **argv, bool code) { #endif } -struct cmd_results *bar_cmd_tray_bindcode(int argc, char **argv) { +struct cmd_results bar_cmd_tray_bindcode(int argc, char **argv) { return tray_bind(argc, argv, true); } -struct cmd_results *bar_cmd_tray_bindsym(int argc, char **argv) { +struct cmd_results bar_cmd_tray_bindsym(int argc, char **argv) { return tray_bind(argc, argv, false); } diff --git a/sway/commands/bar/tray_output.c b/sway/commands/bar/tray_output.c index eb3b486e2..7b8928352 100644 --- a/sway/commands/bar/tray_output.c +++ b/sway/commands/bar/tray_output.c @@ -6,10 +6,10 @@ #include "list.h" #include "log.h" -struct cmd_results *bar_cmd_tray_output(int argc, char **argv) { +struct cmd_results bar_cmd_tray_output(int argc, char **argv) { #if HAVE_TRAY - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tray_output", EXPECTED_EQUAL_TO, 1))) { + struct cmd_results error; + if (checkarg(&error, argc, "tray_output", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/bar/tray_padding.c b/sway/commands/bar/tray_padding.c index f90b6003f..174877127 100644 --- a/sway/commands/bar/tray_padding.c +++ b/sway/commands/bar/tray_padding.c @@ -5,13 +5,13 @@ #include "sway/config.h" #include "log.h" -struct cmd_results *bar_cmd_tray_padding(int argc, char **argv) { +struct cmd_results bar_cmd_tray_padding(int argc, char **argv) { #if HAVE_TRAY - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tray_padding", EXPECTED_AT_LEAST, 1))) { + struct cmd_results error; + if (checkarg(&error, argc, "tray_padding", EXPECTED_AT_LEAST, 1)) { return error; } - if ((error = checkarg(argc, "tray_padding", EXPECTED_AT_MOST, 2))) { + if (checkarg(&error, argc, "tray_padding", EXPECTED_AT_MOST, 2)) { return error; } diff --git a/sway/commands/bar/workspace_buttons.c b/sway/commands/bar/workspace_buttons.c index 6bfb16165..c66f1166f 100644 --- a/sway/commands/bar/workspace_buttons.c +++ b/sway/commands/bar/workspace_buttons.c @@ -4,9 +4,9 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_workspace_buttons(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "workspace_buttons", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_workspace_buttons(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "workspace_buttons", EXPECTED_EQUAL_TO, 1)) { return error; } config->current_bar->workspace_buttons = diff --git a/sway/commands/bar/wrap_scroll.c b/sway/commands/bar/wrap_scroll.c index f57e393df..c679136df 100644 --- a/sway/commands/bar/wrap_scroll.c +++ b/sway/commands/bar/wrap_scroll.c @@ -4,9 +4,9 @@ #include "log.h" #include "util.h" -struct cmd_results *bar_cmd_wrap_scroll(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "wrap_scroll", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results bar_cmd_wrap_scroll(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "wrap_scroll", EXPECTED_EQUAL_TO, 1)) { return error; } config->current_bar->wrap_scroll = diff --git a/sway/commands/bind.c b/sway/commands/bind.c index 5ec899826..717ce9b4b 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c @@ -116,7 +116,7 @@ static int key_qsort_cmp(const void *keyp_a, const void *keyp_b) { * the value of *type if the initial type guess was incorrect and if this * was the first identified key. */ -static struct cmd_results *identify_key(const char* name, bool first_key, +static struct cmd_results identify_key(const char* name, bool first_key, uint32_t* key_val, enum binding_input_type* type) { if (*type == BINDING_MOUSECODE) { // check for mouse bindcodes @@ -124,7 +124,7 @@ static struct cmd_results *identify_key(const char* name, bool first_key, uint32_t button = get_mouse_bindcode(name, &message); if (!button) { if (message) { - struct cmd_results *error = + struct cmd_results error = cmd_results_new(CMD_INVALID, message); free(message); return error; @@ -140,7 +140,7 @@ static struct cmd_results *identify_key(const char* name, bool first_key, uint32_t button = get_mouse_bindsym(name, &message); if (!button) { if (message) { - struct cmd_results *error = + struct cmd_results error = cmd_results_new(CMD_INVALID, message); free(message); return error; @@ -158,7 +158,7 @@ static struct cmd_results *identify_key(const char* name, bool first_key, if (button) { *type = BINDING_MOUSECODE; *key_val = button; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } } @@ -179,14 +179,14 @@ static struct cmd_results *identify_key(const char* name, bool first_key, char *message = NULL; uint32_t button = get_mouse_bindsym(name, &message); if (message) { - struct cmd_results *error = + struct cmd_results error = cmd_results_new(CMD_INVALID, message); free(message); return error; } else if (button) { *type = BINDING_MOUSESYM; *key_val = button; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } } @@ -202,10 +202,10 @@ static struct cmd_results *identify_key(const char* name, bool first_key, } *key_val = keysym; } - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *switch_binding_add( +static struct cmd_results switch_binding_add( struct sway_switch_binding *binding, const char *bindtype, const char *switchcombo, bool warn) { list_t *mode_bindings = config->current_mode->switch_bindings; @@ -237,7 +237,7 @@ static struct cmd_results *switch_binding_add( return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *switch_binding_remove( +static struct cmd_results switch_binding_remove( struct sway_switch_binding *binding, const char *bindtype, const char *switchcombo) { list_t *mode_bindings = config->current_mode->switch_bindings; @@ -276,7 +276,7 @@ static struct sway_binding *binding_upsert(struct sway_binding *binding, return NULL; } -static struct cmd_results *binding_add(struct sway_binding *binding, +static struct cmd_results binding_add(struct sway_binding *binding, list_t *mode_bindings, const char *bindtype, const char *keycombo, bool warn) { struct sway_binding *config_binding = binding_upsert(binding, mode_bindings); @@ -300,7 +300,7 @@ static struct cmd_results *binding_add(struct sway_binding *binding, return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *binding_remove(struct sway_binding *binding, +static struct cmd_results binding_remove(struct sway_binding *binding, list_t *mode_bindings, const char *bindtype, const char *keycombo) { for (int i = 0; i < mode_bindings->length; ++i) { @@ -319,7 +319,7 @@ static struct cmd_results *binding_remove(struct sway_binding *binding, "for the given flags", keycombo); } -static struct cmd_results *cmd_bindsym_or_bindcode(int argc, char **argv, +static struct cmd_results cmd_bindsym_or_bindcode(int argc, char **argv, bool bindcode, bool unbind) { const char *bindtype; int minargs = 2; @@ -330,8 +330,8 @@ static struct cmd_results *cmd_bindsym_or_bindcode(int argc, char **argv, bindtype = bindcode ? "bindcode": "bindsym"; } - struct cmd_results *error = NULL; - if ((error = checkarg(argc, bindtype, EXPECTED_AT_LEAST, minargs))) { + struct cmd_results error; + if (checkarg(&error, argc, bindtype, EXPECTED_AT_LEAST, minargs)) { return error; } @@ -431,7 +431,7 @@ static struct cmd_results *cmd_bindsym_or_bindcode(int argc, char **argv, uint32_t key_val = 0; error = identify_key(split->items[i], binding->keys->length == 0, &key_val, &binding->type); - if (error) { + if (error.status != CMD_SUCCESS) { free_sway_binding(binding); list_free(split); return error; @@ -485,7 +485,7 @@ static struct cmd_results *cmd_bindsym_or_bindcode(int argc, char **argv, return binding_add(binding, mode_bindings, bindtype, argv[0], warn); } -struct cmd_results *cmd_bind_or_unbind_switch(int argc, char **argv, +struct cmd_results cmd_bind_or_unbind_switch(int argc, char **argv, bool unbind) { int minargs = 2; char *bindtype = "bindswitch"; @@ -494,8 +494,8 @@ struct cmd_results *cmd_bind_or_unbind_switch(int argc, char **argv, bindtype = "unbindswitch"; } - struct cmd_results *error = NULL; - if ((error = checkarg(argc, bindtype, EXPECTED_AT_LEAST, minargs))) { + struct cmd_results error; + if (checkarg(&error, argc, bindtype, EXPECTED_AT_LEAST, minargs)) { return error; } struct sway_switch_binding *binding = calloc(1, sizeof(struct sway_switch_binding)); @@ -566,27 +566,27 @@ struct cmd_results *cmd_bind_or_unbind_switch(int argc, char **argv, return switch_binding_add(binding, bindtype, argv[0], warn); } -struct cmd_results *cmd_bindsym(int argc, char **argv) { +struct cmd_results cmd_bindsym(int argc, char **argv) { return cmd_bindsym_or_bindcode(argc, argv, false, false); } -struct cmd_results *cmd_bindcode(int argc, char **argv) { +struct cmd_results cmd_bindcode(int argc, char **argv) { return cmd_bindsym_or_bindcode(argc, argv, true, false); } -struct cmd_results *cmd_unbindsym(int argc, char **argv) { +struct cmd_results cmd_unbindsym(int argc, char **argv) { return cmd_bindsym_or_bindcode(argc, argv, false, true); } -struct cmd_results *cmd_unbindcode(int argc, char **argv) { +struct cmd_results cmd_unbindcode(int argc, char **argv) { return cmd_bindsym_or_bindcode(argc, argv, true, true); } -struct cmd_results *cmd_bindswitch(int argc, char **argv) { +struct cmd_results cmd_bindswitch(int argc, char **argv) { return cmd_bind_or_unbind_switch(argc, argv, false); } -struct cmd_results *cmd_unbindswitch(int argc, char **argv) { +struct cmd_results cmd_unbindswitch(int argc, char **argv) { return cmd_bind_or_unbind_switch(argc, argv, true); } @@ -630,7 +630,8 @@ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) binding->command, results->error); success = false; } - free_cmd_results(results); + free_cmd_results(*results); + free(results); } list_free(res_list); if (success) { diff --git a/sway/commands/border.c b/sway/commands/border.c index 647663acf..035c7e8e4 100644 --- a/sway/commands/border.c +++ b/sway/commands/border.c @@ -56,9 +56,9 @@ static void border_toggle(struct sway_container *con) { } } -struct cmd_results *cmd_border(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "border", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_border(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "border", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/client.c b/sway/commands/client.c index f5c7d90fb..8bf37e219 100644 --- a/sway/commands/client.c +++ b/sway/commands/client.c @@ -53,10 +53,10 @@ static bool parse_color_float(char *hexstring, float dest[static 4]) { return true; } -static struct cmd_results *handle_command(int argc, char **argv, +static struct cmd_results handle_command(int argc, char **argv, struct border_colors *class, char *cmd_name) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, cmd_name, EXPECTED_EQUAL_TO, 5))) { + struct cmd_results error; + if (checkarg(&error, argc, cmd_name, EXPECTED_EQUAL_TO, 5)) { return error; } @@ -97,23 +97,23 @@ static struct cmd_results *handle_command(int argc, char **argv, return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *cmd_client_focused(int argc, char **argv) { +struct cmd_results cmd_client_focused(int argc, char **argv) { return handle_command(argc, argv, &config->border_colors.focused, "client.focused"); } -struct cmd_results *cmd_client_focused_inactive(int argc, char **argv) { +struct cmd_results cmd_client_focused_inactive(int argc, char **argv) { return handle_command(argc, argv, &config->border_colors.focused_inactive, "client.focused_inactive"); } -struct cmd_results *cmd_client_unfocused(int argc, char **argv) { +struct cmd_results cmd_client_unfocused(int argc, char **argv) { return handle_command(argc, argv, &config->border_colors.unfocused, "client.unfocused"); } -struct cmd_results *cmd_client_urgent(int argc, char **argv) { +struct cmd_results cmd_client_urgent(int argc, char **argv) { return handle_command(argc, argv, &config->border_colors.urgent, "client.urgent"); } -struct cmd_results *cmd_client_noop(int argc, char **argv) { +struct cmd_results cmd_client_noop(int argc, char **argv) { sway_log(SWAY_INFO, "Warning: %s is ignored by sway", argv[-1]); return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/create_output.c b/sway/commands/create_output.c index 9961c8fb9..9c898c923 100644 --- a/sway/commands/create_output.c +++ b/sway/commands/create_output.c @@ -29,7 +29,7 @@ static void create_output(struct wlr_backend *backend, void *data) { /** * This command is intended for developer use only. */ -struct cmd_results *cmd_create_output(int argc, char **argv) { +struct cmd_results cmd_create_output(int argc, char **argv) { sway_assert(wlr_backend_is_multi(server.backend), "Expected a multi backend"); diff --git a/sway/commands/default_border.c b/sway/commands/default_border.c index 5c0fee3f3..51aa58364 100644 --- a/sway/commands/default_border.c +++ b/sway/commands/default_border.c @@ -3,9 +3,9 @@ #include "sway/config.h" #include "sway/tree/container.h" -struct cmd_results *cmd_default_border(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "default_border", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_default_border(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "default_border", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/default_floating_border.c b/sway/commands/default_floating_border.c index 7e4edc366..b992ec5e6 100644 --- a/sway/commands/default_floating_border.c +++ b/sway/commands/default_floating_border.c @@ -3,10 +3,10 @@ #include "sway/config.h" #include "sway/tree/container.h" -struct cmd_results *cmd_default_floating_border(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "default_floating_border", - EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_default_floating_border(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "default_floating_border", + EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/default_orientation.c b/sway/commands/default_orientation.c index fd42c1679..c0138de99 100644 --- a/sway/commands/default_orientation.c +++ b/sway/commands/default_orientation.c @@ -2,9 +2,9 @@ #include #include "sway/commands.h" -struct cmd_results *cmd_default_orientation(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "default_orientation", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_default_orientation(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "default_orientation", EXPECTED_EQUAL_TO, 1)) { return error; } if (strcasecmp(argv[0], "horizontal") == 0) { diff --git a/sway/commands/exec.c b/sway/commands/exec.c index 87d907162..9f696b242 100644 --- a/sway/commands/exec.c +++ b/sway/commands/exec.c @@ -4,7 +4,7 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_exec(int argc, char **argv) { +struct cmd_results cmd_exec(int argc, char **argv) { if (!config->active) return cmd_results_new(CMD_DEFER, NULL); if (config->reloading) { char *args = join_args(argv, argc); diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c index a57242950..bf1362dc8 100644 --- a/sway/commands/exec_always.c +++ b/sway/commands/exec_always.c @@ -13,12 +13,12 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_exec_always(int argc, char **argv) { - struct cmd_results *error = NULL; +struct cmd_results cmd_exec_always(int argc, char **argv) { + struct cmd_results error; if (!config->active || config->validating) { return cmd_results_new(CMD_DEFER, NULL); } - if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) { + if (checkarg(&error, argc, argv[-1], EXPECTED_AT_LEAST, 1)) { return error; } @@ -26,7 +26,7 @@ struct cmd_results *cmd_exec_always(int argc, char **argv) { if (strcmp(argv[0], "--no-startup-id") == 0) { sway_log(SWAY_INFO, "exec switch '--no-startup-id' not supported, ignored."); --argc; ++argv; - if ((error = checkarg(argc, argv[-1], EXPECTED_AT_LEAST, 1))) { + if (checkarg(&error, argc, argv[-1], EXPECTED_AT_LEAST, 1)) { return error; } } diff --git a/sway/commands/exit.c b/sway/commands/exit.c index 10cde640c..c02486661 100644 --- a/sway/commands/exit.c +++ b/sway/commands/exit.c @@ -4,9 +4,9 @@ void sway_terminate(int exit_code); -struct cmd_results *cmd_exit(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "exit", EXPECTED_EQUAL_TO, 0))) { +struct cmd_results cmd_exit(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "exit", EXPECTED_EQUAL_TO, 0)) { return error; } sway_terminate(0); diff --git a/sway/commands/floating.c b/sway/commands/floating.c index ce1233454..c4729f8b0 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c @@ -11,9 +11,9 @@ #include "list.h" #include "util.h" -struct cmd_results *cmd_floating(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "floating", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_floating(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "floating", EXPECTED_EQUAL_TO, 1)) { return error; } if (!root->outputs->length) { diff --git a/sway/commands/floating_minmax_size.c b/sway/commands/floating_minmax_size.c index 3a1d606a0..b13f40893 100644 --- a/sway/commands/floating_minmax_size.c +++ b/sway/commands/floating_minmax_size.c @@ -13,10 +13,10 @@ static const char min_usage[] = static const char max_usage[] = "Expected 'floating_maximum_size x '"; -static struct cmd_results *handle_command(int argc, char **argv, char *cmd_name, +static struct cmd_results handle_command(int argc, char **argv, char *cmd_name, const char *usage, int *config_width, int *config_height) { - struct cmd_results *error; - if ((error = checkarg(argc, cmd_name, EXPECTED_EQUAL_TO, 3))) { + struct cmd_results error; + if (checkarg(&error, argc, cmd_name, EXPECTED_EQUAL_TO, 3)) { return error; } @@ -41,12 +41,12 @@ static struct cmd_results *handle_command(int argc, char **argv, char *cmd_name, return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *cmd_floating_minimum_size(int argc, char **argv) { +struct cmd_results cmd_floating_minimum_size(int argc, char **argv) { return handle_command(argc, argv, "floating_minimum_size", min_usage, &config->floating_minimum_width, &config->floating_minimum_height); } -struct cmd_results *cmd_floating_maximum_size(int argc, char **argv) { +struct cmd_results cmd_floating_maximum_size(int argc, char **argv) { return handle_command(argc, argv, "floating_maximum_size", max_usage, &config->floating_maximum_width, &config->floating_maximum_height); } diff --git a/sway/commands/floating_modifier.c b/sway/commands/floating_modifier.c index fd606281a..b14f3bdf6 100644 --- a/sway/commands/floating_modifier.c +++ b/sway/commands/floating_modifier.c @@ -3,9 +3,9 @@ #include "sway/config.h" #include "sway/input/keyboard.h" -struct cmd_results *cmd_floating_modifier(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "floating_modifier", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_floating_modifier(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "floating_modifier", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/focus.c b/sway/commands/focus.c index d745aab5c..13b14c2c8 100644 --- a/sway/commands/focus.c +++ b/sway/commands/focus.c @@ -258,7 +258,7 @@ static struct sway_node *node_get_in_direction_floating( return closest_con ? &closest_con->node : NULL; } -static struct cmd_results *focus_mode(struct sway_workspace *ws, +static struct cmd_results focus_mode(struct sway_workspace *ws, struct sway_seat *seat, bool floating) { struct sway_container *new_focus = NULL; if (floating) { @@ -277,7 +277,7 @@ static struct cmd_results *focus_mode(struct sway_workspace *ws, return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *focus_output(struct sway_seat *seat, +static struct cmd_results focus_output(struct sway_seat *seat, int argc, char **argv) { if (!argc) { return cmd_results_new(CMD_INVALID, @@ -322,7 +322,7 @@ static struct cmd_results *focus_output(struct sway_seat *seat, return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *focus_parent(void) { +static struct cmd_results focus_parent(void) { struct sway_seat *seat = config->handler_context.seat; struct sway_container *con = config->handler_context.container; if (!con || con->fullscreen_mode) { @@ -336,7 +336,7 @@ static struct cmd_results *focus_parent(void) { return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *focus_child(void) { +static struct cmd_results focus_child(void) { struct sway_seat *seat = config->handler_context.seat; struct sway_node *node = config->handler_context.node; struct sway_node *focus = seat_get_active_tiling_child(seat, node); @@ -347,7 +347,7 @@ static struct cmd_results *focus_child(void) { return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *cmd_focus(int argc, char **argv) { +struct cmd_results cmd_focus(int argc, char **argv) { if (config->reading || !config->active) { return cmd_results_new(CMD_DEFER, NULL); } diff --git a/sway/commands/focus_follows_mouse.c b/sway/commands/focus_follows_mouse.c index 7afb5f623..98cc0c0a3 100644 --- a/sway/commands/focus_follows_mouse.c +++ b/sway/commands/focus_follows_mouse.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "util.h" -struct cmd_results *cmd_focus_follows_mouse(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "focus_follows_mouse", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_focus_follows_mouse(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "focus_follows_mouse", EXPECTED_EQUAL_TO, 1)) { return error; } else if(strcmp(argv[0], "no") == 0) { config->focus_follows_mouse = FOLLOWS_NO; diff --git a/sway/commands/focus_on_window_activation.c b/sway/commands/focus_on_window_activation.c index 2163fc590..8b02f9e35 100644 --- a/sway/commands/focus_on_window_activation.c +++ b/sway/commands/focus_on_window_activation.c @@ -1,9 +1,9 @@ #include "sway/commands.h" -struct cmd_results *cmd_focus_on_window_activation(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "focus_on_window_activation", - EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_focus_on_window_activation(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "focus_on_window_activation", + EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/focus_wrapping.c b/sway/commands/focus_wrapping.c index d3901cb8f..a83618f15 100644 --- a/sway/commands/focus_wrapping.c +++ b/sway/commands/focus_wrapping.c @@ -3,9 +3,9 @@ #include "sway/config.h" #include "util.h" -struct cmd_results *cmd_focus_wrapping(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "focus_wrapping", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_focus_wrapping(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "focus_wrapping", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/font.c b/sway/commands/font.c index c54365b53..aa121e934 100644 --- a/sway/commands/font.c +++ b/sway/commands/font.c @@ -5,9 +5,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_font(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "font", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_font(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "font", EXPECTED_AT_LEAST, 1)) { return error; } char *font = join_args(argv, argc); diff --git a/sway/commands/for_window.c b/sway/commands/for_window.c index ee9f46478..aad1e7b19 100644 --- a/sway/commands/for_window.c +++ b/sway/commands/for_window.c @@ -5,9 +5,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_for_window(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "for_window", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_for_window(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "for_window", EXPECTED_AT_LEAST, 2)) { return error; } diff --git a/sway/commands/force_display_urgency_hint.c b/sway/commands/force_display_urgency_hint.c index 3202fc43a..899b9861a 100644 --- a/sway/commands/force_display_urgency_hint.c +++ b/sway/commands/force_display_urgency_hint.c @@ -1,10 +1,10 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *cmd_force_display_urgency_hint(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "force_display_urgency_hint", - EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_force_display_urgency_hint(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "force_display_urgency_hint", + EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/force_focus_wrapping.c b/sway/commands/force_focus_wrapping.c index fafc1c3ef..83da9ba03 100644 --- a/sway/commands/force_focus_wrapping.c +++ b/sway/commands/force_focus_wrapping.c @@ -3,7 +3,7 @@ #include "log.h" #include "util.h" -struct cmd_results *cmd_force_focus_wrapping(int argc, char **argv) { +struct cmd_results cmd_force_focus_wrapping(int argc, char **argv) { sway_log(SWAY_INFO, "Warning: force_focus_wrapping is deprecated. " "Use focus_wrapping instead."); if (config->reading) { @@ -11,9 +11,8 @@ struct cmd_results *cmd_force_focus_wrapping(int argc, char **argv) { "Use focus_wrapping instead."); } - struct cmd_results *error = - checkarg(argc, "force_focus_wrapping", EXPECTED_EQUAL_TO, 1); - if (error) { + struct cmd_results error; + if (checkarg(&error, argc, "force_focus_wrapping", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/fullscreen.c b/sway/commands/fullscreen.c index 3392a7f7b..69f107a68 100644 --- a/sway/commands/fullscreen.c +++ b/sway/commands/fullscreen.c @@ -9,9 +9,9 @@ #include "util.h" // fullscreen [enable|disable|toggle] [global] -struct cmd_results *cmd_fullscreen(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "fullscreen", EXPECTED_AT_MOST, 2))) { +struct cmd_results cmd_fullscreen(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "fullscreen", EXPECTED_AT_MOST, 2)) { return error; } if (!root->outputs->length) { diff --git a/sway/commands/gaps.c b/sway/commands/gaps.c index 021df843a..09ad133d4 100644 --- a/sway/commands/gaps.c +++ b/sway/commands/gaps.c @@ -45,9 +45,9 @@ static void prevent_invalid_outer_gaps(void) { // gaps inner|outer|horizontal|vertical|top|right|bottom|left static const char expected_defaults[] = "'gaps inner|outer|horizontal|vertical|top|right|bottom|left '"; -static struct cmd_results *gaps_set_defaults(int argc, char **argv) { - struct cmd_results *error = checkarg(argc, "gaps", EXPECTED_EQUAL_TO, 2); - if (error) { +static struct cmd_results gaps_set_defaults(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "gaps", EXPECTED_EQUAL_TO, 2)) { return error; } @@ -136,9 +136,9 @@ static void configure_gaps(struct sway_workspace *ws, void *_data) { // set|plus|minus static const char expected_runtime[] = "'gaps inner|outer|horizontal|vertical|" "top|right|bottom|left current|all set|plus|minus '"; -static struct cmd_results *gaps_set_runtime(int argc, char **argv) { - struct cmd_results *error = checkarg(argc, "gaps", EXPECTED_EQUAL_TO, 4); - if (error) { +static struct cmd_results gaps_set_runtime(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "gaps", EXPECTED_EQUAL_TO, 4)) { return error; } if (!root->outputs->length) { @@ -203,9 +203,9 @@ static struct cmd_results *gaps_set_runtime(int argc, char **argv) { // gaps inner|outer|| current|all set|plus|minus - runtime only // = horizontal|vertical // = top|right|bottom|left -struct cmd_results *cmd_gaps(int argc, char **argv) { - struct cmd_results *error = checkarg(argc, "gaps", EXPECTED_AT_LEAST, 2); - if (error) { +struct cmd_results cmd_gaps(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "gaps", EXPECTED_AT_LEAST, 2)) { return error; } diff --git a/sway/commands/hide_edge_borders.c b/sway/commands/hide_edge_borders.c index 9a1d84458..d706b4699 100644 --- a/sway/commands/hide_edge_borders.c +++ b/sway/commands/hide_edge_borders.c @@ -3,12 +3,12 @@ #include "sway/tree/arrange.h" #include "sway/tree/view.h" -struct cmd_results *cmd_hide_edge_borders(int argc, char **argv) { +struct cmd_results cmd_hide_edge_borders(int argc, char **argv) { const char *expected_syntax = "Expected 'hide_edge_borders [--i3] " "none|vertical|horizontal|both|smart|smart_no_gaps"; - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "hide_edge_borders", EXPECTED_AT_LEAST, 1))) { + struct cmd_results error; + if (checkarg(&error, argc, "hide_edge_borders", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/include.c b/sway/commands/include.c index d4c14c35f..bc9cccb1f 100644 --- a/sway/commands/include.c +++ b/sway/commands/include.c @@ -1,9 +1,9 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *cmd_include(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "include", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_include(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "include", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/inhibit_idle.c b/sway/commands/inhibit_idle.c index aebc2bf9f..9618b7437 100644 --- a/sway/commands/inhibit_idle.c +++ b/sway/commands/inhibit_idle.c @@ -5,9 +5,9 @@ #include "sway/tree/container.h" #include "sway/tree/view.h" -struct cmd_results *cmd_inhibit_idle(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "inhibit_idle", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_inhibit_idle(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "inhibit_idle", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/input.c b/sway/commands/input.c index 53db9a16a..1339757d6 100644 --- a/sway/commands/input.c +++ b/sway/commands/input.c @@ -44,9 +44,9 @@ static struct cmd_handler input_config_handlers[] = { { "xkb_numlock", input_cmd_xkb_numlock }, }; -struct cmd_results *cmd_input(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "input", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_input(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "input", EXPECTED_AT_LEAST, 2)) { return error; } @@ -57,7 +57,7 @@ struct cmd_results *cmd_input(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "Couldn't allocate config"); } - struct cmd_results *res; + struct cmd_results res; if (find_handler(argv[1], input_config_handlers, sizeof(input_config_handlers))) { @@ -73,16 +73,14 @@ struct cmd_results *cmd_input(int argc, char **argv) { input_handlers, sizeof(input_handlers)); } - if ((!res || res->status == CMD_SUCCESS) && + if (res.status == CMD_SUCCESS && strcmp(argv[1], "xkb_switch_layout") != 0) { char *error = NULL; struct input_config *ic = store_input_config(config->handler_context.input_config, &error); if (!ic) { free_input_config(config->handler_context.input_config); - if (res) { - free_cmd_results(res); - } + free_cmd_results(res); res = cmd_results_new(CMD_FAILURE, "Failed to compile keymap: %s", error ? error : "(details unavailable)"); free(error); diff --git a/sway/commands/input/accel_profile.c b/sway/commands/input/accel_profile.c index 08f324cca..cf7ff57c7 100644 --- a/sway/commands/input/accel_profile.c +++ b/sway/commands/input/accel_profile.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "sway/input/input-manager.h" -struct cmd_results *input_cmd_accel_profile(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "accel_profile", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_accel_profile(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "accel_profile", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/calibration_matrix.c b/sway/commands/input/calibration_matrix.c index 38749fbb9..6371e1e8c 100644 --- a/sway/commands/input/calibration_matrix.c +++ b/sway/commands/input/calibration_matrix.c @@ -8,9 +8,9 @@ #include "stringop.h" #include "util.h" -struct cmd_results *input_cmd_calibration_matrix(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "calibration_matrix", EXPECTED_EQUAL_TO, 6))) { +struct cmd_results input_cmd_calibration_matrix(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "calibration_matrix", EXPECTED_EQUAL_TO, 6)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/click_method.c b/sway/commands/input/click_method.c index 03fcb458f..7b2bd4bca 100644 --- a/sway/commands/input/click_method.c +++ b/sway/commands/input/click_method.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "log.h" -struct cmd_results *input_cmd_click_method(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "click_method", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_click_method(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "click_method", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/drag.c b/sway/commands/input/drag.c index 062357d4f..93bfaf9e6 100644 --- a/sway/commands/input/drag.c +++ b/sway/commands/input/drag.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_drag(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "drag", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_drag(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "drag", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/drag_lock.c b/sway/commands/input/drag_lock.c index 24c548e2d..406d342e7 100644 --- a/sway/commands/input/drag_lock.c +++ b/sway/commands/input/drag_lock.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_drag_lock(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "drag_lock", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_drag_lock(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "drag_lock", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/dwt.c b/sway/commands/input/dwt.c index a7a4e4943..a1a9d614a 100644 --- a/sway/commands/input/dwt.c +++ b/sway/commands/input/dwt.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_dwt(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "dwt", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_dwt(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "dwt", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/events.c b/sway/commands/input/events.c index cd2985ee9..faa18281c 100644 --- a/sway/commands/input/events.c +++ b/sway/commands/input/events.c @@ -105,9 +105,9 @@ static void toggle_wildcard_send_events(int argc, char **argv) { } } -struct cmd_results *input_cmd_events(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "events", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_events(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "events", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/left_handed.c b/sway/commands/input/left_handed.c index 93d8d56d8..bdf2a78ba 100644 --- a/sway/commands/input/left_handed.c +++ b/sway/commands/input/left_handed.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_left_handed(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "left_handed", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_left_handed(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "left_handed", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/map_from_region.c b/sway/commands/input/map_from_region.c index de00b7141..7466b6576 100644 --- a/sway/commands/input/map_from_region.c +++ b/sway/commands/input/map_from_region.c @@ -33,9 +33,9 @@ static bool parse_coords(const char *str, double *x, double *y, bool *mm) { return true; } -struct cmd_results *input_cmd_map_from_region(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "map_from_region", EXPECTED_EQUAL_TO, 2))) { +struct cmd_results input_cmd_map_from_region(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "map_from_region", EXPECTED_EQUAL_TO, 2)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/map_to_output.c b/sway/commands/input/map_to_output.c index f60fb7d57..60254db06 100644 --- a/sway/commands/input/map_to_output.c +++ b/sway/commands/input/map_to_output.c @@ -6,9 +6,9 @@ #include "sway/input/input-manager.h" #include "log.h" -struct cmd_results *input_cmd_map_to_output(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "map_to_output", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_map_to_output(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "map_to_output", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/map_to_region.c b/sway/commands/input/map_to_region.c index e85495e53..ccb5ee443 100644 --- a/sway/commands/input/map_to_region.c +++ b/sway/commands/input/map_to_region.c @@ -5,9 +5,9 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *input_cmd_map_to_region(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "map_to_region", EXPECTED_EQUAL_TO, 4))) { +struct cmd_results input_cmd_map_to_region(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "map_to_region", EXPECTED_EQUAL_TO, 4)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/middle_emulation.c b/sway/commands/input/middle_emulation.c index 9f32692e0..28ebe1df3 100644 --- a/sway/commands/input/middle_emulation.c +++ b/sway/commands/input/middle_emulation.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_middle_emulation(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "middle_emulation", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_middle_emulation(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "middle_emulation", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/natural_scroll.c b/sway/commands/input/natural_scroll.c index dec32a5ba..6ec493a69 100644 --- a/sway/commands/input/natural_scroll.c +++ b/sway/commands/input/natural_scroll.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_natural_scroll(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "natural_scroll", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_natural_scroll(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "natural_scroll", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/pointer_accel.c b/sway/commands/input/pointer_accel.c index e214b32f8..26db1c0e2 100644 --- a/sway/commands/input/pointer_accel.c +++ b/sway/commands/input/pointer_accel.c @@ -6,9 +6,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_pointer_accel(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "pointer_accel", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_pointer_accel(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "pointer_accel", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/repeat_delay.c b/sway/commands/input/repeat_delay.c index 5b787fe63..37994d27f 100644 --- a/sway/commands/input/repeat_delay.c +++ b/sway/commands/input/repeat_delay.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "sway/input/input-manager.h" -struct cmd_results *input_cmd_repeat_delay(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "repeat_delay", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_repeat_delay(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "repeat_delay", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/repeat_rate.c b/sway/commands/input/repeat_rate.c index 79c5efe22..cc5cf299b 100644 --- a/sway/commands/input/repeat_rate.c +++ b/sway/commands/input/repeat_rate.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "sway/input/input-manager.h" -struct cmd_results *input_cmd_repeat_rate(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "repeat_rate", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_repeat_rate(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "repeat_rate", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/scroll_button.c b/sway/commands/input/scroll_button.c index 6b3314190..a19368ef6 100644 --- a/sway/commands/input/scroll_button.c +++ b/sway/commands/input/scroll_button.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "sway/input/cursor.h" -struct cmd_results *input_cmd_scroll_button(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "scroll_button", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_scroll_button(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "scroll_button", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/scroll_factor.c b/sway/commands/input/scroll_factor.c index 4b72b6fa8..8b6bcabf5 100644 --- a/sway/commands/input/scroll_factor.c +++ b/sway/commands/input/scroll_factor.c @@ -7,9 +7,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_scroll_factor(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "scroll_factor", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_scroll_factor(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "scroll_factor", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/scroll_method.c b/sway/commands/input/scroll_method.c index cd8b5f7a7..571126e45 100644 --- a/sway/commands/input/scroll_method.c +++ b/sway/commands/input/scroll_method.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "sway/input/input-manager.h" -struct cmd_results *input_cmd_scroll_method(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "scroll_method", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_scroll_method(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "scroll_method", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/tap.c b/sway/commands/input/tap.c index 443fd49d7..206297a83 100644 --- a/sway/commands/input/tap.c +++ b/sway/commands/input/tap.c @@ -6,9 +6,9 @@ #include "log.h" #include "util.h" -struct cmd_results *input_cmd_tap(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tap", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_tap(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "tap", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/tap_button_map.c b/sway/commands/input/tap_button_map.c index 77ac6de7b..349e0093a 100644 --- a/sway/commands/input/tap_button_map.c +++ b/sway/commands/input/tap_button_map.c @@ -4,9 +4,9 @@ #include "sway/commands.h" #include "sway/input/input-manager.h" -struct cmd_results *input_cmd_tap_button_map(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tap_button_map", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_tap_button_map(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "tap_button_map", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_capslock.c b/sway/commands/input/xkb_capslock.c index 7ce98ebbe..f1d3d63c3 100644 --- a/sway/commands/input/xkb_capslock.c +++ b/sway/commands/input/xkb_capslock.c @@ -5,9 +5,9 @@ #include "sway/input/input-manager.h" #include "util.h" -struct cmd_results *input_cmd_xkb_capslock(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_capslock", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_xkb_capslock(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_capslock", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_file.c b/sway/commands/input/xkb_file.c index 493f94fbd..1c59eca35 100644 --- a/sway/commands/input/xkb_file.c +++ b/sway/commands/input/xkb_file.c @@ -6,9 +6,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *input_cmd_xkb_file(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_file", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_file(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_file", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_layout.c b/sway/commands/input/xkb_layout.c index 226265175..cf37943b5 100644 --- a/sway/commands/input/xkb_layout.c +++ b/sway/commands/input/xkb_layout.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *input_cmd_xkb_layout(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_layout", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_layout(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_layout", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_model.c b/sway/commands/input/xkb_model.c index f4a33de3e..503e55b90 100644 --- a/sway/commands/input/xkb_model.c +++ b/sway/commands/input/xkb_model.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *input_cmd_xkb_model(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_model", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_model(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_model", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_numlock.c b/sway/commands/input/xkb_numlock.c index 87d3e60c1..45e19d10d 100644 --- a/sway/commands/input/xkb_numlock.c +++ b/sway/commands/input/xkb_numlock.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "util.h" -struct cmd_results *input_cmd_xkb_numlock(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_numlock", EXPECTED_AT_LEAST, 1))) { +struct cmd_results input_cmd_xkb_numlock(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_numlock", EXPECTED_AT_LEAST, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_options.c b/sway/commands/input/xkb_options.c index d609293f7..388afa90c 100644 --- a/sway/commands/input/xkb_options.c +++ b/sway/commands/input/xkb_options.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *input_cmd_xkb_options(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_options", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_options(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_options", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_rules.c b/sway/commands/input/xkb_rules.c index 3b59622c4..0324e91d1 100644 --- a/sway/commands/input/xkb_rules.c +++ b/sway/commands/input/xkb_rules.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *input_cmd_xkb_rules(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_rules", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_rules(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_rules", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_switch_layout.c b/sway/commands/input/xkb_switch_layout.c index 286c040da..da131dc10 100644 --- a/sway/commands/input/xkb_switch_layout.c +++ b/sway/commands/input/xkb_switch_layout.c @@ -13,9 +13,9 @@ static void switch_layout(struct wlr_keyboard *kbd, xkb_layout_index_t idx) { kbd->modifiers.latched, kbd->modifiers.locked, idx); } -struct cmd_results *input_cmd_xkb_switch_layout(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_switch_layout", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_switch_layout(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_switch_layout", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/input/xkb_variant.c b/sway/commands/input/xkb_variant.c index d0e21d778..a93948c41 100644 --- a/sway/commands/input/xkb_variant.c +++ b/sway/commands/input/xkb_variant.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "log.h" -struct cmd_results *input_cmd_xkb_variant(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xkb_variant", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results input_cmd_xkb_variant(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xkb_variant", EXPECTED_EQUAL_TO, 1)) { return error; } struct input_config *ic = config->handler_context.input_config; diff --git a/sway/commands/kill.c b/sway/commands/kill.c index f1e95e4bb..2e9ac3587 100644 --- a/sway/commands/kill.c +++ b/sway/commands/kill.c @@ -12,7 +12,7 @@ static void close_container_iterator(struct sway_container *con, void *data) { } } -struct cmd_results *cmd_kill(int argc, char **argv) { +struct cmd_results cmd_kill(int argc, char **argv) { if (!root->outputs->length) { return cmd_results_new(CMD_INVALID, "Can't run this command while there's no outputs connected."); diff --git a/sway/commands/layout.c b/sway/commands/layout.c index 4b31b442e..2fa63e6e4 100644 --- a/sway/commands/layout.c +++ b/sway/commands/layout.c @@ -114,9 +114,9 @@ static enum sway_container_layout get_layout(int argc, char **argv, return L_NONE; } -struct cmd_results *cmd_layout(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "layout", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_layout(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "layout", EXPECTED_AT_LEAST, 1)) { return error; } if (!root->outputs->length) { diff --git a/sway/commands/mark.c b/sway/commands/mark.c index aa5f185c8..a4b8281ea 100644 --- a/sway/commands/mark.c +++ b/sway/commands/mark.c @@ -13,9 +13,9 @@ // mark --add --toggle foo Toggle current mark and persist other marks // mark --replace --toggle foo Toggle current mark and remove other marks -struct cmd_results *cmd_mark(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "mark", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_mark(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "mark", EXPECTED_AT_LEAST, 1)) { return error; } struct sway_container *container = config->handler_context.container; diff --git a/sway/commands/max_render_time.c b/sway/commands/max_render_time.c index ec3282f18..61cda8ac3 100644 --- a/sway/commands/max_render_time.c +++ b/sway/commands/max_render_time.c @@ -3,7 +3,7 @@ #include "sway/config.h" #include "sway/tree/view.h" -struct cmd_results *cmd_max_render_time(int argc, char **argv) { +struct cmd_results cmd_max_render_time(int argc, char **argv) { if (!argc) { return cmd_results_new(CMD_INVALID, "Missing max render time argument."); } diff --git a/sway/commands/mode.c b/sway/commands/mode.c index a5871dabe..356962d60 100644 --- a/sway/commands/mode.c +++ b/sway/commands/mode.c @@ -19,9 +19,9 @@ static struct cmd_handler mode_handlers[] = { { "unbindsym", cmd_unbindsym }, }; -struct cmd_results *cmd_mode(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "mode", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_mode(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "mode", EXPECTED_AT_LEAST, 1)) { return error; } @@ -79,7 +79,7 @@ struct cmd_results *cmd_mode(int argc, char **argv) { } // Create binding - struct cmd_results *result = config_subcommand(argv + 1, argc - 1, + struct cmd_results result = config_subcommand(argv + 1, argc - 1, mode_handlers, sizeof(mode_handlers)); config->current_mode = stored_mode; diff --git a/sway/commands/mouse_warping.c b/sway/commands/mouse_warping.c index 8b643f625..124e87d46 100644 --- a/sway/commands/mouse_warping.c +++ b/sway/commands/mouse_warping.c @@ -2,9 +2,9 @@ #include #include "sway/commands.h" -struct cmd_results *cmd_mouse_warping(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "mouse_warping", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_mouse_warping(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "mouse_warping", EXPECTED_EQUAL_TO, 1)) { return error; } else if (strcasecmp(argv[0], "container") == 0) { config->mouse_warping = WARP_CONTAINER; diff --git a/sway/commands/move.c b/sway/commands/move.c index 6ad1c7ca0..c7bd4fa0f 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c @@ -388,13 +388,13 @@ static bool container_move_in_direction(struct sway_container *container, return false; } -static struct cmd_results *cmd_move_to_scratchpad(void); +static struct cmd_results cmd_move_to_scratchpad(void); -static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth, +static struct cmd_results cmd_move_container(bool no_auto_back_and_forth, int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "move container/window", - EXPECTED_AT_LEAST, 2))) { + struct cmd_results error; + if (checkarg(&error, argc, "move container/window", + EXPECTED_AT_LEAST, 2)) { return error; } @@ -629,9 +629,9 @@ static void workspace_move_to_output(struct sway_workspace *workspace, ipc_event_workspace(NULL, workspace, "move"); } -static struct cmd_results *cmd_move_workspace(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "move workspace", EXPECTED_AT_LEAST, 1))) { +static struct cmd_results cmd_move_workspace(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "move workspace", EXPECTED_AT_LEAST, 1)) { return error; } @@ -666,7 +666,7 @@ static struct cmd_results *cmd_move_workspace(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *cmd_move_in_direction( +static struct cmd_results cmd_move_in_direction( enum wlr_direction direction, int argc, char **argv) { int move_amt = 10; if (argc) { @@ -747,7 +747,7 @@ static const char expected_position_syntax[] = "'move [absolute] position center' or " "'move position cursor|mouse|pointer'"; -static struct cmd_results *cmd_move_to_position(int argc, char **argv) { +static struct cmd_results cmd_move_to_position(int argc, char **argv) { struct sway_container *container = config->handler_context.container; if (!container || !container_is_floating(container)) { return cmd_results_new(CMD_FAILURE, "Only floating containers " @@ -843,7 +843,7 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *cmd_move_to_scratchpad(void) { +static struct cmd_results cmd_move_to_scratchpad(void) { struct sway_node *node = config->handler_context.node; struct sway_container *con = config->handler_context.container; struct sway_workspace *ws = config->handler_context.workspace; @@ -885,9 +885,9 @@ static const char expected_full_syntax[] = "Expected " " or 'move [window|container] [to] [absolute] position center'" " or 'move [window|container] [to] position mouse|cursor|pointer'"; -struct cmd_results *cmd_move(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "move", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_move(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "move", EXPECTED_AT_LEAST, 1)) { return error; } if (!root->outputs->length) { diff --git a/sway/commands/new_float.c b/sway/commands/new_float.c index 4fedb4cb8..e913b2c11 100644 --- a/sway/commands/new_float.c +++ b/sway/commands/new_float.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *cmd_new_float(int argc, char **argv) { +struct cmd_results cmd_new_float(int argc, char **argv) { sway_log(SWAY_INFO, "Warning: new_float is deprecated. " "Use default_floating_border instead."); if (config->reading) { diff --git a/sway/commands/new_window.c b/sway/commands/new_window.c index e8caa4873..073fd0978 100644 --- a/sway/commands/new_window.c +++ b/sway/commands/new_window.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *cmd_new_window(int argc, char **argv) { +struct cmd_results cmd_new_window(int argc, char **argv) { sway_log(SWAY_INFO, "Warning: new_window is deprecated. " "Use default_border instead."); if (config->reading) { diff --git a/sway/commands/no_focus.c b/sway/commands/no_focus.c index 2001e04f0..eabed1d20 100644 --- a/sway/commands/no_focus.c +++ b/sway/commands/no_focus.c @@ -4,9 +4,9 @@ #include "list.h" #include "log.h" -struct cmd_results *cmd_no_focus(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "no_focus", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_no_focus(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "no_focus", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/nop.c b/sway/commands/nop.c index 973ade0e0..347688922 100644 --- a/sway/commands/nop.c +++ b/sway/commands/nop.c @@ -1,5 +1,5 @@ #include "sway/commands.h" -struct cmd_results *cmd_nop(int argc, char **argv) { +struct cmd_results cmd_nop(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/opacity.c b/sway/commands/opacity.c index 96e6228ed..9a7e9a003 100644 --- a/sway/commands/opacity.c +++ b/sway/commands/opacity.c @@ -5,9 +5,9 @@ #include "sway/tree/view.h" #include "log.h" -struct cmd_results *cmd_opacity(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "opacity", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_opacity(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "opacity", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/output.c b/sway/commands/output.c index 2790bd631..aa44f7aad 100644 --- a/sway/commands/output.c +++ b/sway/commands/output.c @@ -25,9 +25,9 @@ static struct cmd_handler output_handlers[] = { { "transform", output_cmd_transform }, }; -struct cmd_results *cmd_output(int argc, char **argv) { - struct cmd_results *error = checkarg(argc, "output", EXPECTED_AT_LEAST, 1); - if (error != NULL) { +struct cmd_results cmd_output(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "output", EXPECTED_AT_LEAST, 1)) { return error; } @@ -66,7 +66,7 @@ struct cmd_results *cmd_output(int argc, char **argv) { } if (!output) { sway_log(SWAY_ERROR, "Failed to allocate output config"); - return NULL; + return cmd_results_new(CMD_FAILURE, "Failed to allocate output config"); } argc--; argv++; @@ -84,7 +84,7 @@ struct cmd_results *cmd_output(int argc, char **argv) { "Invalid output subcommand: %s.", *argv); } - if (error != NULL) { + if (error.status != CMD_SUCCESS) { goto fail; } diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c index 68ee9fe14..43b1d4dcf 100644 --- a/sway/commands/output/background.c +++ b/sway/commands/output/background.c @@ -29,7 +29,7 @@ static bool validate_color(const char *color) { return *ptr == '\0'; } -struct cmd_results *output_cmd_background(int argc, char **argv) { +struct cmd_results output_cmd_background(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -80,7 +80,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { char *src = join_args(argv, j); if (!expand_path(&src)) { - struct cmd_results *cmd_res = cmd_results_new(CMD_INVALID, + struct cmd_results cmd_res = cmd_results_new(CMD_INVALID, "Invalid syntax (%s)", src); free(src); return cmd_res; @@ -150,5 +150,5 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { config->handler_context.leftovers.argc = argc; config->handler_context.leftovers.argv = argv; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/disable.c b/sway/commands/output/disable.c index 624f4056d..f37ae9317 100644 --- a/sway/commands/output/disable.c +++ b/sway/commands/output/disable.c @@ -1,7 +1,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_disable(int argc, char **argv) { +struct cmd_results output_cmd_disable(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -9,5 +9,5 @@ struct cmd_results *output_cmd_disable(int argc, char **argv) { config->handler_context.leftovers.argc = argc; config->handler_context.leftovers.argv = argv; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/dpms.c b/sway/commands/output/dpms.c index 9d75a80e8..eec56ca76 100644 --- a/sway/commands/output/dpms.c +++ b/sway/commands/output/dpms.c @@ -2,7 +2,7 @@ #include "sway/config.h" #include "util.h" -struct cmd_results *output_cmd_dpms(int argc, char **argv) { +struct cmd_results output_cmd_dpms(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -18,5 +18,5 @@ struct cmd_results *output_cmd_dpms(int argc, char **argv) { config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argv = argv + 1; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/enable.c b/sway/commands/output/enable.c index bae3961f8..ac52e8689 100644 --- a/sway/commands/output/enable.c +++ b/sway/commands/output/enable.c @@ -1,7 +1,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_enable(int argc, char **argv) { +struct cmd_results output_cmd_enable(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -10,6 +10,6 @@ struct cmd_results *output_cmd_enable(int argc, char **argv) { config->handler_context.leftovers.argc = argc; config->handler_context.leftovers.argv = argv; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/max_render_time.c b/sway/commands/output/max_render_time.c index 2d3cebe30..118dbb5b4 100644 --- a/sway/commands/output/max_render_time.c +++ b/sway/commands/output/max_render_time.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_max_render_time(int argc, char **argv) { +struct cmd_results output_cmd_max_render_time(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -24,5 +24,5 @@ struct cmd_results *output_cmd_max_render_time(int argc, char **argv) { config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argv = argv + 1; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/mode.c b/sway/commands/output/mode.c index 5b710713a..6a5e553fb 100644 --- a/sway/commands/output/mode.c +++ b/sway/commands/output/mode.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_mode(int argc, char **argv) { +struct cmd_results output_cmd_mode(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -55,6 +55,6 @@ struct cmd_results *output_cmd_mode(int argc, char **argv) { config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argv = argv + 1; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/position.c b/sway/commands/output/position.c index 689462cb9..05de430dd 100644 --- a/sway/commands/output/position.c +++ b/sway/commands/output/position.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_position(int argc, char **argv) { +struct cmd_results output_cmd_position(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -36,6 +36,6 @@ struct cmd_results *output_cmd_position(int argc, char **argv) { config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argv = argv + 1; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/scale.c b/sway/commands/output/scale.c index 9398e06ac..069f8e060 100644 --- a/sway/commands/output/scale.c +++ b/sway/commands/output/scale.c @@ -2,7 +2,7 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *output_cmd_scale(int argc, char **argv) { +struct cmd_results output_cmd_scale(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -18,5 +18,5 @@ struct cmd_results *output_cmd_scale(int argc, char **argv) { config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argv = argv + 1; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/scale_filter.c b/sway/commands/output/scale_filter.c index fa1e8e0d5..782ab437a 100644 --- a/sway/commands/output/scale_filter.c +++ b/sway/commands/output/scale_filter.c @@ -4,7 +4,7 @@ #include "sway/config.h" #include "sway/output.h" -struct cmd_results *output_cmd_scale_filter(int argc, char **argv) { +struct cmd_results output_cmd_scale_filter(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -30,5 +30,5 @@ struct cmd_results *output_cmd_scale_filter(int argc, char **argv) { config->handler_context.leftovers.argv = argv + 1; oc->scale_filter = scale_filter; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/subpixel.c b/sway/commands/output/subpixel.c index 63191ee62..612c87dd1 100644 --- a/sway/commands/output/subpixel.c +++ b/sway/commands/output/subpixel.c @@ -4,7 +4,7 @@ #include "sway/config.h" #include "sway/output.h" -struct cmd_results *output_cmd_subpixel(int argc, char **argv) { +struct cmd_results output_cmd_subpixel(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -32,5 +32,5 @@ struct cmd_results *output_cmd_subpixel(int argc, char **argv) { config->handler_context.leftovers.argv = argv + 1; oc->subpixel = subpixel; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/toggle.c b/sway/commands/output/toggle.c index 6342d526b..c012fa543 100644 --- a/sway/commands/output/toggle.c +++ b/sway/commands/output/toggle.c @@ -2,7 +2,7 @@ #include "sway/config.h" #include "sway/output.h" -struct cmd_results *output_cmd_toggle(int argc, char **argv) { +struct cmd_results output_cmd_toggle(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -32,6 +32,6 @@ struct cmd_results *output_cmd_toggle(int argc, char **argv) { free(oc); config->handler_context.leftovers.argc = argc; config->handler_context.leftovers.argv = argv; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/output/transform.c b/sway/commands/output/transform.c index 8e5324adb..ee97f8456 100644 --- a/sway/commands/output/transform.c +++ b/sway/commands/output/transform.c @@ -4,7 +4,7 @@ #include "log.h" #include "sway/output.h" -struct cmd_results *output_cmd_transform(int argc, char **argv) { +struct cmd_results output_cmd_transform(int argc, char **argv) { if (!config->handler_context.output_config) { return cmd_results_new(CMD_FAILURE, "Missing output config"); } @@ -38,7 +38,8 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { if (argc > 1 && (strcmp(argv[1], "clockwise") == 0 || strcmp(argv[1], "anticlockwise") == 0)) { if (!sway_assert(output->name != NULL, "Output config name not set")) { - return NULL; + return cmd_results_new(CMD_INVALID, + "Output config name not set"); } if (strcmp(output->name, "*") == 0) { return cmd_results_new(CMD_INVALID, @@ -58,5 +59,5 @@ struct cmd_results *output_cmd_transform(int argc, char **argv) { config->handler_context.leftovers.argc -= 1; } output->transform = transform; - return NULL; + return cmd_results_new(CMD_SUCCESS, NULL); } diff --git a/sway/commands/popup_during_fullscreen.c b/sway/commands/popup_during_fullscreen.c index e81562623..41158cca1 100644 --- a/sway/commands/popup_during_fullscreen.c +++ b/sway/commands/popup_during_fullscreen.c @@ -2,10 +2,10 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *cmd_popup_during_fullscreen(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "popup_during_fullscreen", - EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_popup_during_fullscreen(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "popup_during_fullscreen", + EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/reload.c b/sway/commands/reload.c index 19ec065cd..030df5465 100644 --- a/sway/commands/reload.c +++ b/sway/commands/reload.c @@ -49,9 +49,9 @@ static void do_reload(void *data) { arrange_root(); } -struct cmd_results *cmd_reload(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0))) { +struct cmd_results cmd_reload(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "reload", EXPECTED_EQUAL_TO, 0)) { return error; } diff --git a/sway/commands/rename.c b/sway/commands/rename.c index 3b855fdf7..f24cf8c2a 100644 --- a/sway/commands/rename.c +++ b/sway/commands/rename.c @@ -15,9 +15,9 @@ static const char expected_syntax[] = "Expected 'rename workspace to ' or " "'rename workspace to '"; -struct cmd_results *cmd_rename(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "rename", EXPECTED_AT_LEAST, 3))) { +struct cmd_results cmd_rename(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "rename", EXPECTED_AT_LEAST, 3)) { return error; } if (!root->outputs->length) { diff --git a/sway/commands/resize.c b/sway/commands/resize.c index 0c9af12d1..fdb6a911c 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c @@ -216,7 +216,7 @@ void container_resize_tiled(struct sway_container *con, /** * Implement `resize ` for a floating container. */ -static struct cmd_results *resize_adjust_floating(uint32_t axis, +static struct cmd_results resize_adjust_floating(uint32_t axis, struct resize_amount *amount) { struct sway_container *con = config->handler_context.container; int grow_width = 0, grow_height = 0; @@ -273,7 +273,7 @@ static struct cmd_results *resize_adjust_floating(uint32_t axis, /** * Implement `resize ` for a tiled container. */ -static struct cmd_results *resize_adjust_tiled(uint32_t axis, +static struct cmd_results resize_adjust_tiled(uint32_t axis, struct resize_amount *amount) { struct sway_container *current = config->handler_context.container; @@ -303,7 +303,7 @@ static struct cmd_results *resize_adjust_tiled(uint32_t axis, /** * Implement `resize set` for a tiled container. */ -static struct cmd_results *resize_set_tiled(struct sway_container *con, +static struct cmd_results resize_set_tiled(struct sway_container *con, struct resize_amount *width, struct resize_amount *height) { if (width->amount) { if (width->unit == RESIZE_UNIT_PPT || @@ -353,7 +353,7 @@ static struct cmd_results *resize_set_tiled(struct sway_container *con, /** * Implement `resize set` for a floating container. */ -static struct cmd_results *resize_set_floating(struct sway_container *con, +static struct cmd_results resize_set_floating(struct sway_container *con, struct resize_amount *width, struct resize_amount *height) { int min_width, max_width, min_height, max_height, grow_width = 0, grow_height = 0; floating_calculate_constraints(&min_width, &max_width, @@ -424,9 +424,9 @@ static struct cmd_results *resize_set_floating(struct sway_container *con, * : height [px|ppt] * : [width] [px|ppt] [height] [px|ppt] */ -static struct cmd_results *cmd_resize_set(int argc, char **argv) { - struct cmd_results *error; - if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 1))) { +static struct cmd_results cmd_resize_set(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "resize", EXPECTED_AT_LEAST, 1)) { return error; } const char usage[] = "Expected 'resize set [width] [px|ppt]' or " @@ -484,7 +484,7 @@ static struct cmd_results *cmd_resize_set(int argc, char **argv) { * args: * args: or */ -static struct cmd_results *cmd_resize_adjust(int argc, char **argv, +static struct cmd_results cmd_resize_adjust(int argc, char **argv, int multiplier) { const char usage[] = "Expected 'resize grow|shrink " "[ px|ppt [or px|ppt]]'"; @@ -566,7 +566,7 @@ static struct cmd_results *cmd_resize_adjust(int argc, char **argv, } } -struct cmd_results *cmd_resize(int argc, char **argv) { +struct cmd_results cmd_resize(int argc, char **argv) { if (!root->outputs->length) { return cmd_results_new(CMD_INVALID, "Can't run this command while there's no outputs connected."); @@ -576,8 +576,8 @@ struct cmd_results *cmd_resize(int argc, char **argv) { return cmd_results_new(CMD_INVALID, "Cannot resize nothing"); } - struct cmd_results *error; - if ((error = checkarg(argc, "resize", EXPECTED_AT_LEAST, 2))) { + struct cmd_results error; + if (checkarg(&error, argc, "resize", EXPECTED_AT_LEAST, 2)) { return error; } diff --git a/sway/commands/scratchpad.c b/sway/commands/scratchpad.c index 34871bc6a..e911b3b49 100644 --- a/sway/commands/scratchpad.c +++ b/sway/commands/scratchpad.c @@ -89,9 +89,9 @@ static void scratchpad_toggle_container(struct sway_container *con) { ipc_event_window(con, "move"); } -struct cmd_results *cmd_scratchpad(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "scratchpad", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_scratchpad(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "scratchpad", EXPECTED_EQUAL_TO, 1)) { return error; } if (strcmp(argv[0], "show") != 0) { diff --git a/sway/commands/seat.c b/sway/commands/seat.c index eba28cacf..595b94d43 100644 --- a/sway/commands/seat.c +++ b/sway/commands/seat.c @@ -25,18 +25,18 @@ static struct cmd_handler seat_handlers[] = { { "xcursor_theme", seat_cmd_xcursor_theme }, }; -static struct cmd_results *action_handlers(int argc, char **argv) { - struct cmd_results *res = config_subcommand(argv, argc, +static struct cmd_results action_handlers(int argc, char **argv) { + struct cmd_results res = config_subcommand(argv, argc, seat_action_handlers, sizeof(seat_action_handlers)); free_seat_config(config->handler_context.seat_config); config->handler_context.seat_config = NULL; return res; } -static struct cmd_results *config_handlers(int argc, char **argv) { - struct cmd_results *res = config_subcommand(argv, argc, +static struct cmd_results config_handlers(int argc, char **argv) { + struct cmd_results res = config_subcommand(argv, argc, seat_handlers, sizeof(seat_handlers)); - if (res && res->status != CMD_SUCCESS) { + if (res.status != CMD_SUCCESS) { free_seat_config(config->handler_context.seat_config); } else { struct seat_config *sc = @@ -49,9 +49,9 @@ static struct cmd_results *config_handlers(int argc, char **argv) { return res; } -struct cmd_results *cmd_seat(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "seat", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_seat(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "seat", EXPECTED_AT_LEAST, 2)) { return error; } @@ -69,12 +69,12 @@ struct cmd_results *cmd_seat(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "Couldn't allocate config"); } - struct cmd_results *res = NULL; + struct cmd_results res; if (find_handler(argv[1], seat_action_handlers, sizeof(seat_action_handlers))) { res = action_handlers(argc - 1, argv + 1); } else { res = config_handlers(argc - 1, argv + 1); } - return res ? res : cmd_results_new(CMD_SUCCESS, NULL); + return res; } diff --git a/sway/commands/seat/attach.c b/sway/commands/seat/attach.c index 7615eef9b..a21c21ad3 100644 --- a/sway/commands/seat/attach.c +++ b/sway/commands/seat/attach.c @@ -4,9 +4,9 @@ #include "sway/config.h" #include "stringop.h" -struct cmd_results *seat_cmd_attach(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "attach", EXPECTED_AT_LEAST, 1))) { +struct cmd_results seat_cmd_attach(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "attach", EXPECTED_AT_LEAST, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/cursor.c b/sway/commands/seat/cursor.c index 085e6a33f..81d06d2cc 100644 --- a/sway/commands/seat/cursor.c +++ b/sway/commands/seat/cursor.c @@ -7,14 +7,14 @@ #include "sway/commands.h" #include "sway/input/cursor.h" -static struct cmd_results *press_or_release(struct sway_cursor *cursor, +static bool press_or_release(struct cmd_results *error, struct sway_cursor *cursor, char *action, char *button_str); static const char expected_syntax[] = "Expected 'cursor ' or " "'cursor ' or " "'cursor '"; -static struct cmd_results *handle_command(struct sway_cursor *cursor, +static struct cmd_results handle_command(struct sway_cursor *cursor, int argc, char **argv) { if (strcasecmp(argv[0], "move") == 0) { if (argc < 3) { @@ -37,8 +37,8 @@ static struct cmd_results *handle_command(struct sway_cursor *cursor, if (argc < 2) { return cmd_results_new(CMD_INVALID, expected_syntax); } - struct cmd_results *error = NULL; - if ((error = press_or_release(cursor, argv[0], argv[1]))) { + struct cmd_results error; + if (press_or_release(&error, cursor, argv[0], argv[1])) { return error; } } @@ -46,9 +46,9 @@ static struct cmd_results *handle_command(struct sway_cursor *cursor, return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *seat_cmd_cursor(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "cursor", EXPECTED_AT_LEAST, 2))) { +struct cmd_results seat_cmd_cursor(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "cursor", EXPECTED_AT_LEAST, 2)) { return error; } struct seat_config *sc = config->handler_context.seat_config; @@ -66,21 +66,20 @@ struct cmd_results *seat_cmd_cursor(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "Seat %s does not exist", sc->name); } - error = handle_command(seat->cursor, argc, argv); + return handle_command(seat->cursor, argc, argv); } else { struct sway_seat *seat = NULL; wl_list_for_each(seat, &server.input->seats, link) { error = handle_command(seat->cursor, argc, argv); - if ((error && error->status != CMD_SUCCESS)) { - break; + if (error.status != CMD_SUCCESS) { + return error; } } + return cmd_results_new(CMD_SUCCESS, NULL); } - - return error ? error : cmd_results_new(CMD_SUCCESS, NULL); } -static struct cmd_results *press_or_release(struct sway_cursor *cursor, +static bool press_or_release(struct cmd_results *error, struct sway_cursor *cursor, char *action, char *button_str) { enum wlr_button_state state; uint32_t button; @@ -89,16 +88,16 @@ static struct cmd_results *press_or_release(struct sway_cursor *cursor, } else if (strcasecmp(action, "release") == 0) { state = WLR_BUTTON_RELEASED; } else { - return cmd_results_new(CMD_INVALID, expected_syntax); + *error = cmd_results_new(CMD_INVALID, expected_syntax); + return true; } char *message = NULL; button = get_mouse_button(button_str, &message); if (message) { - struct cmd_results *error = - cmd_results_new(CMD_INVALID, message); + *error = cmd_results_new(CMD_INVALID, message); free(message); - return error; + return true; } else if (button == SWAY_SCROLL_UP || button == SWAY_SCROLL_DOWN || button == SWAY_SCROLL_LEFT || button == SWAY_SCROLL_RIGHT) { // Dispatch axis event @@ -117,10 +116,11 @@ static struct cmd_results *press_or_release(struct sway_cursor *cursor, .delta_discrete = delta }; dispatch_cursor_axis(cursor, &event); - return cmd_results_new(CMD_SUCCESS, NULL); + return false; } else if (!button) { - return cmd_results_new(CMD_INVALID, "Unknown button %s", button_str); + *error = cmd_results_new(CMD_INVALID, "Unknown button %s", button_str); + return true; } dispatch_cursor_button(cursor, NULL, 0, button, state); - return cmd_results_new(CMD_SUCCESS, NULL); + return false; } diff --git a/sway/commands/seat/fallback.c b/sway/commands/seat/fallback.c index 0330c3537..91a9a2219 100644 --- a/sway/commands/seat/fallback.c +++ b/sway/commands/seat/fallback.c @@ -2,9 +2,9 @@ #include "sway/commands.h" #include "util.h" -struct cmd_results *seat_cmd_fallback(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "fallback", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results seat_cmd_fallback(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "fallback", EXPECTED_EQUAL_TO, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/hide_cursor.c b/sway/commands/seat/hide_cursor.c index 3bfce6977..5fd09092b 100644 --- a/sway/commands/seat/hide_cursor.c +++ b/sway/commands/seat/hide_cursor.c @@ -5,9 +5,9 @@ #include "sway/input/seat.h" #include "stringop.h" -struct cmd_results *seat_cmd_hide_cursor(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "hide_cursor", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results seat_cmd_hide_cursor(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "hide_cursor", EXPECTED_EQUAL_TO, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/idle.c b/sway/commands/seat/idle.c index 82428f2c9..f0de4b67e 100644 --- a/sway/commands/seat/idle.c +++ b/sway/commands/seat/idle.c @@ -38,9 +38,9 @@ static uint32_t parse_sources(int argc, char **argv) { return sources; } -struct cmd_results *seat_cmd_idle_inhibit(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "idle_inhibit", EXPECTED_AT_LEAST, 1))) { +struct cmd_results seat_cmd_idle_inhibit(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "idle_inhibit", EXPECTED_AT_LEAST, 1)) { return error; } if (!config->handler_context.seat_config) { @@ -55,9 +55,9 @@ struct cmd_results *seat_cmd_idle_inhibit(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *seat_cmd_idle_wake(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "idle_wake", EXPECTED_AT_LEAST, 1))) { +struct cmd_results seat_cmd_idle_wake(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "idle_wake", EXPECTED_AT_LEAST, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/keyboard_grouping.c b/sway/commands/seat/keyboard_grouping.c index 5ad0f4081..e40a3a33b 100644 --- a/sway/commands/seat/keyboard_grouping.c +++ b/sway/commands/seat/keyboard_grouping.c @@ -3,9 +3,9 @@ #include "sway/config.h" #include "stringop.h" -struct cmd_results *seat_cmd_keyboard_grouping(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "keyboard_grouping", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results seat_cmd_keyboard_grouping(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "keyboard_grouping", EXPECTED_EQUAL_TO, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/pointer_constraint.c b/sway/commands/seat/pointer_constraint.c index 3890ebde0..8dd1e5e9d 100644 --- a/sway/commands/seat/pointer_constraint.c +++ b/sway/commands/seat/pointer_constraint.c @@ -12,9 +12,9 @@ enum operation { }; // pointer_constraint [enable|disable|escape] -struct cmd_results *seat_cmd_pointer_constraint(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "pointer_constraint", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results seat_cmd_pointer_constraint(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "pointer_constraint", EXPECTED_EQUAL_TO, 1)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/seat/xcursor_theme.c b/sway/commands/seat/xcursor_theme.c index 202f35b9e..668920433 100644 --- a/sway/commands/seat/xcursor_theme.c +++ b/sway/commands/seat/xcursor_theme.c @@ -3,10 +3,10 @@ #include "sway/commands.h" #include "sway/config.h" -struct cmd_results *seat_cmd_xcursor_theme(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xcursor_theme", EXPECTED_AT_LEAST, 1)) || - (error = checkarg(argc, "xcursor_theme", EXPECTED_AT_MOST, 2))) { +struct cmd_results seat_cmd_xcursor_theme(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xcursor_theme", EXPECTED_AT_LEAST, 1) || + checkarg(&error, argc, "xcursor_theme", EXPECTED_AT_MOST, 2)) { return error; } if (!config->handler_context.seat_config) { diff --git a/sway/commands/set.c b/sway/commands/set.c index c539e9fc7..1b6c12aae 100644 --- a/sway/commands/set.c +++ b/sway/commands/set.c @@ -24,9 +24,9 @@ void free_sway_variable(struct sway_variable *var) { free(var); } -struct cmd_results *cmd_set(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "set", EXPECTED_AT_LEAST, 2))) { +struct cmd_results cmd_set(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "set", EXPECTED_AT_LEAST, 2)) { return error; } diff --git a/sway/commands/show_marks.c b/sway/commands/show_marks.c index 0d373b80c..aa173cb08 100644 --- a/sway/commands/show_marks.c +++ b/sway/commands/show_marks.c @@ -14,9 +14,9 @@ static void rebuild_marks_iterator(struct sway_container *con, void *data) { container_update_marks_textures(con); } -struct cmd_results *cmd_show_marks(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "show_marks", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_show_marks(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "show_marks", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/smart_borders.c b/sway/commands/smart_borders.c index 738786799..0c78c3545 100644 --- a/sway/commands/smart_borders.c +++ b/sway/commands/smart_borders.c @@ -4,9 +4,9 @@ #include "sway/tree/view.h" #include "util.h" -struct cmd_results *cmd_smart_borders(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "smart_borders", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_smart_borders(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "smart_borders", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/smart_gaps.c b/sway/commands/smart_gaps.c index b27f9ccde..29a180623 100644 --- a/sway/commands/smart_gaps.c +++ b/sway/commands/smart_gaps.c @@ -8,10 +8,9 @@ #include "stringop.h" #include "util.h" -struct cmd_results *cmd_smart_gaps(int argc, char **argv) { - struct cmd_results *error = checkarg(argc, "smart_gaps", EXPECTED_AT_LEAST, 1); - - if (error) { +struct cmd_results cmd_smart_gaps(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "smart_gaps", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/split.c b/sway/commands/split.c index 8702f39e6..19d25896d 100644 --- a/sway/commands/split.c +++ b/sway/commands/split.c @@ -9,7 +9,7 @@ #include "sway/input/seat.h" #include "log.h" -static struct cmd_results *do_split(int layout) { +static struct cmd_results do_split(int layout) { struct sway_container *con = config->handler_context.container; struct sway_workspace *ws = config->handler_context.workspace; if (con) { @@ -36,9 +36,9 @@ static struct cmd_results *do_split(int layout) { return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *cmd_split(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "split", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_split(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "split", EXPECTED_EQUAL_TO, 1)) { return error; } if (!root->outputs->length) { @@ -66,25 +66,25 @@ struct cmd_results *cmd_split(int argc, char **argv) { return cmd_results_new(CMD_SUCCESS, NULL); } -struct cmd_results *cmd_splitv(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { +struct cmd_results cmd_splitv(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "splitv", EXPECTED_EQUAL_TO, 0)) { return error; } return do_split(L_VERT); } -struct cmd_results *cmd_splith(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { +struct cmd_results cmd_splith(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "splitv", EXPECTED_EQUAL_TO, 0)) { return error; } return do_split(L_HORIZ); } -struct cmd_results *cmd_splitt(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { +struct cmd_results cmd_splitt(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "splitv", EXPECTED_EQUAL_TO, 0)) { return error; } diff --git a/sway/commands/sticky.c b/sway/commands/sticky.c index 9df1fe09d..fa52c5b64 100644 --- a/sway/commands/sticky.c +++ b/sway/commands/sticky.c @@ -12,9 +12,9 @@ #include "log.h" #include "util.h" -struct cmd_results *cmd_sticky(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "sticky", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_sticky(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "sticky", EXPECTED_EQUAL_TO, 1)) { return error; } struct sway_container *container = config->handler_context.container; diff --git a/sway/commands/swap.c b/sway/commands/swap.c index 697de2268..edcd1789c 100644 --- a/sway/commands/swap.c +++ b/sway/commands/swap.c @@ -208,9 +208,9 @@ static bool test_mark(struct sway_container *container, void *mark) { return false; } -struct cmd_results *cmd_swap(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "swap", EXPECTED_AT_LEAST, 4))) { +struct cmd_results cmd_swap(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "swap", EXPECTED_AT_LEAST, 4)) { return error; } if (!root->outputs->length) { @@ -242,23 +242,22 @@ struct cmd_results *cmd_swap(int argc, char **argv) { } if (!other) { - error = cmd_results_new(CMD_FAILURE, + struct cmd_results res = cmd_results_new(CMD_FAILURE, "Failed to find %s '%s'", argv[2], value); + free(value); + return res; } else if (!current) { - error = cmd_results_new(CMD_FAILURE, + free(value); + return cmd_results_new(CMD_FAILURE, "Can only swap with containers and views"); } else if (container_has_ancestor(current, other) || container_has_ancestor(other, current)) { - error = cmd_results_new(CMD_FAILURE, + free(value); + return cmd_results_new(CMD_FAILURE, "Cannot swap ancestor and descendant"); } - free(value); - if (error) { - return error; - } - container_swap(current, other); if (root->fullscreen_global) { diff --git a/sway/commands/swaybg_command.c b/sway/commands/swaybg_command.c index 92e9bdfd6..603c7db5c 100644 --- a/sway/commands/swaybg_command.c +++ b/sway/commands/swaybg_command.c @@ -3,9 +3,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_swaybg_command(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "swaybg_command", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_swaybg_command(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "swaybg_command", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/swaynag_command.c b/sway/commands/swaynag_command.c index f851d2234..663a1a5f1 100644 --- a/sway/commands/swaynag_command.c +++ b/sway/commands/swaynag_command.c @@ -3,9 +3,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_swaynag_command(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "swaynag_command", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_swaynag_command(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "swaynag_command", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/tiling_drag.c b/sway/commands/tiling_drag.c index e95526e80..2816e4219 100644 --- a/sway/commands/tiling_drag.c +++ b/sway/commands/tiling_drag.c @@ -1,9 +1,9 @@ #include "sway/commands.h" #include "util.h" -struct cmd_results *cmd_tiling_drag(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tiling_drag", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_tiling_drag(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "tiling_drag", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/tiling_drag_threshold.c b/sway/commands/tiling_drag_threshold.c index f11911182..a1105dfbd 100644 --- a/sway/commands/tiling_drag_threshold.c +++ b/sway/commands/tiling_drag_threshold.c @@ -3,9 +3,9 @@ #include "sway/config.h" #include "log.h" -struct cmd_results *cmd_tiling_drag_threshold(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "tiling_drag_threshold", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_tiling_drag_threshold(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "tiling_drag_threshold", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/title_align.c b/sway/commands/title_align.c index c30355deb..efebce9d1 100644 --- a/sway/commands/title_align.c +++ b/sway/commands/title_align.c @@ -4,9 +4,9 @@ #include "sway/tree/container.h" #include "sway/tree/root.h" -struct cmd_results *cmd_title_align(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "title_align", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_title_align(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "title_align", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/title_format.c b/sway/commands/title_format.c index 9d312470e..5da7aa2f9 100644 --- a/sway/commands/title_format.c +++ b/sway/commands/title_format.c @@ -6,9 +6,9 @@ #include "log.h" #include "stringop.h" -struct cmd_results *cmd_title_format(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "title_format", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_title_format(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "title_format", EXPECTED_AT_LEAST, 1)) { return error; } struct sway_container *container = config->handler_context.container; diff --git a/sway/commands/titlebar_border_thickness.c b/sway/commands/titlebar_border_thickness.c index 7c27c163a..8f0e84b17 100644 --- a/sway/commands/titlebar_border_thickness.c +++ b/sway/commands/titlebar_border_thickness.c @@ -5,9 +5,9 @@ #include "sway/tree/arrange.h" #include "log.h" -struct cmd_results *cmd_titlebar_border_thickness(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "titlebar_border_thickness", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_titlebar_border_thickness(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "titlebar_border_thickness", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/commands/titlebar_padding.c b/sway/commands/titlebar_padding.c index 29ce59ff0..d5be525c6 100644 --- a/sway/commands/titlebar_padding.c +++ b/sway/commands/titlebar_padding.c @@ -5,9 +5,9 @@ #include "sway/tree/arrange.h" #include "log.h" -struct cmd_results *cmd_titlebar_padding(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "titlebar_padding", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_titlebar_padding(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "titlebar_padding", EXPECTED_AT_LEAST, 1)) { return error; } diff --git a/sway/commands/unmark.c b/sway/commands/unmark.c index cedfcfb2c..2b1ea6fa1 100644 --- a/sway/commands/unmark.c +++ b/sway/commands/unmark.c @@ -18,7 +18,7 @@ static void remove_all_marks_iterator(struct sway_container *con, void *data) { // [criteria] unmark Remove all marks from matched view // [criteria] unmark foo Remove single mark from matched view -struct cmd_results *cmd_unmark(int argc, char **argv) { +struct cmd_results cmd_unmark(int argc, char **argv) { // Determine the container struct sway_container *con = NULL; if (config->handler_context.using_criteria) { diff --git a/sway/commands/urgent.c b/sway/commands/urgent.c index 3a2b00ed5..369339a60 100644 --- a/sway/commands/urgent.c +++ b/sway/commands/urgent.c @@ -6,9 +6,9 @@ #include "sway/tree/view.h" #include "util.h" -struct cmd_results *cmd_urgent(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "urgent", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_urgent(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "urgent", EXPECTED_EQUAL_TO, 1)) { return error; } struct sway_container *container = config->handler_context.container; diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index b911b2f61..f69939912 100644 --- a/sway/commands/workspace.c +++ b/sway/commands/workspace.c @@ -56,13 +56,13 @@ static void prevent_invalid_outer_gaps(struct workspace_config *wsc) { } } -static struct cmd_results *cmd_workspace_gaps(int argc, char **argv, +static struct cmd_results cmd_workspace_gaps(int argc, char **argv, int gaps_location) { const char expected[] = "Expected 'workspace gaps " "inner|outer|horizontal|vertical|top|right|bottom|left '"; - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, - gaps_location + 3))) { + struct cmd_results error; + if (checkarg(&error, argc, "workspace", EXPECTED_EQUAL_TO, + gaps_location + 3)) { return error; } char *ws_name = join_args(argv, argc - 3); @@ -119,9 +119,9 @@ static struct cmd_results *cmd_workspace_gaps(int argc, char **argv, return error; } -struct cmd_results *cmd_workspace(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, 1))) { +struct cmd_results cmd_workspace(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "workspace", EXPECTED_AT_LEAST, 1)) { return error; } @@ -141,8 +141,8 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { } } if (output_location >= 0) { - if ((error = checkarg(argc, "workspace", EXPECTED_AT_LEAST, - output_location + 2))) { + if (checkarg(&error, argc, "workspace", EXPECTED_AT_LEAST, + output_location + 2)) { return error; } char *ws_name = join_args(argv, output_location); @@ -156,9 +156,7 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { list_add(wsc->outputs, strdup(argv[i])); } } else if (gaps_location >= 0) { - if ((error = cmd_workspace_gaps(argc, argv, gaps_location))) { - return error; - } + return cmd_workspace_gaps(argc, argv, gaps_location); } else { if (config->reading || !config->active) { return cmd_results_new(CMD_DEFER, NULL); @@ -175,7 +173,7 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { bool no_auto_back_and_forth = false; while (strcasecmp(argv[0], "--no-auto-back-and-forth") == 0) { no_auto_back_and_forth = true; - if ((error = checkarg(--argc, "workspace", EXPECTED_AT_LEAST, 1))) { + if (checkarg(&error, --argc, "workspace", EXPECTED_AT_LEAST, 1)) { return error; } ++argv; diff --git a/sway/commands/workspace_layout.c b/sway/commands/workspace_layout.c index 4fed05abf..482ccc295 100644 --- a/sway/commands/workspace_layout.c +++ b/sway/commands/workspace_layout.c @@ -2,9 +2,9 @@ #include #include "sway/commands.h" -struct cmd_results *cmd_workspace_layout(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "workspace_layout", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_workspace_layout(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "workspace_layout", EXPECTED_EQUAL_TO, 1)) { return error; } if (strcasecmp(argv[0], "default") == 0) { diff --git a/sway/commands/ws_auto_back_and_forth.c b/sway/commands/ws_auto_back_and_forth.c index e4411c8ed..cbe636b33 100644 --- a/sway/commands/ws_auto_back_and_forth.c +++ b/sway/commands/ws_auto_back_and_forth.c @@ -3,9 +3,9 @@ #include "sway/commands.h" #include "util.h" -struct cmd_results *cmd_ws_auto_back_and_forth(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "workspace_auto_back_and_forth", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_ws_auto_back_and_forth(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "workspace_auto_back_and_forth", EXPECTED_EQUAL_TO, 1)) { return error; } config->auto_back_and_forth = diff --git a/sway/commands/xwayland.c b/sway/commands/xwayland.c index 6ca269231..802297ca5 100644 --- a/sway/commands/xwayland.c +++ b/sway/commands/xwayland.c @@ -4,9 +4,9 @@ #include "sway/server.h" #include "util.h" -struct cmd_results *cmd_xwayland(int argc, char **argv) { - struct cmd_results *error = NULL; - if ((error = checkarg(argc, "xwayland", EXPECTED_EQUAL_TO, 1))) { +struct cmd_results cmd_xwayland(int argc, char **argv) { + struct cmd_results error; + if (checkarg(&error, argc, "xwayland", EXPECTED_EQUAL_TO, 1)) { return error; } diff --git a/sway/config.c b/sway/config.c index 347042772..373d11bab 100644 --- a/sway/config.c +++ b/sway/config.c @@ -657,7 +657,8 @@ void run_deferred_commands(void) { sway_log(SWAY_ERROR, "Error on line '%s': %s", line, res->error); } - free_cmd_results(res); + free_cmd_results(*res); + free(res); } list_del(config->cmd_queue, 0); list_free(res_list); @@ -820,7 +821,7 @@ bool read_config(FILE *file, struct sway_config *config, } config->current_config_line_number = line_number; config->current_config_line = line; - struct cmd_results *res; + struct cmd_results res; char *new_block = NULL; if (block && strcmp(block, "") == 0) { // Special case @@ -828,15 +829,15 @@ bool read_config(FILE *file, struct sway_config *config, } else { res = config_command(expanded, &new_block); } - switch(res->status) { + switch(res.status) { case CMD_FAILURE: case CMD_INVALID: sway_log(SWAY_ERROR, "Error on line %i '%s': %s (%s)", line_number, - line, res->error, config->current_config_path); + line, res.error, config->current_config_path); if (!config->validating) { swaynag_log(config->swaynag_command, swaynag, "Error on line %i (%s) '%s': %s", line_number, - config->current_config_path, line, res->error); + config->current_config_path, line, res.error); } success = false; break; diff --git a/sway/ipc-server.c b/sway/ipc-server.c index 9c4f7a640..00981e276 100644 --- a/sway/ipc-server.c +++ b/sway/ipc-server.c @@ -637,10 +637,10 @@ void ipc_client_handle_command(struct ipc_client *client, uint32_t payload_lengt int length = strlen(json); ipc_send_reply(client, payload_type, json, (uint32_t)length); free(json); - while (res_list->length) { - struct cmd_results *results = res_list->items[0]; - free_cmd_results(results); - list_del(res_list, 0); + for (int i = 0; i < res_list->length; ++i) { + struct cmd_results *res = res_list->items[i]; + free_cmd_results(*res); + free(res); } list_free(res_list); goto exit_cleanup; diff --git a/sway/tree/view.c b/sway/tree/view.c index 93d4fefce..c85d42825 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -441,7 +441,8 @@ void view_execute_criteria(struct sway_view *view) { criteria->cmdlist, NULL, view->container); while (res_list->length) { struct cmd_results *res = res_list->items[0]; - free_cmd_results(res); + free_cmd_results(*res); + free(res); list_del(res_list, 0); } list_free(res_list);