sway/sway/commands/default_floating_border.c
Manuel Stoeckl 221a8b40de 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.
2019-12-22 10:13:41 -05:00

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);
}