mirror of
https://github.com/swaywm/sway.git
synced 2026-04-26 06:46:26 -04:00
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.
29 lines
837 B
C
29 lines
837 B
C
#include "log.h"
|
|
#include "sway/commands.h"
|
|
#include "sway/config.h"
|
|
#include "sway/tree/container.h"
|
|
|
|
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;
|
|
}
|
|
|
|
if (strcmp(argv[0], "none") == 0) {
|
|
config->floating_border = B_NONE;
|
|
} else if (strcmp(argv[0], "normal") == 0) {
|
|
config->floating_border = B_NORMAL;
|
|
} else if (strcmp(argv[0], "pixel") == 0) {
|
|
config->floating_border = B_PIXEL;
|
|
} else {
|
|
return cmd_results_new(CMD_INVALID,
|
|
"Expected 'default_floating_border <none|normal|pixel>' "
|
|
"or 'default_floating_border <normal|pixel> <px>'");
|
|
}
|
|
if (argc == 2) {
|
|
config->floating_border_thickness = atoi(argv[1]);
|
|
}
|
|
|
|
return cmd_results_new(CMD_SUCCESS, NULL);
|
|
}
|