diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-11-20 22:10:03 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-11-21 10:36:15 -0500 |
commit | 2f858a1adaef17241ca6fda973f2b867b25e1971 (patch) | |
tree | 4942dfcbd3eeea04092ff1b40791b8c25e1f4403 /sway/commands/input | |
parent | 66725f2e274df6e18f8190b1307c517e7cb27949 (diff) |
input_cmd_xkb_file: allow shell path expansion
This allows for shell path expansion for input_cmd_xkb_file. The logic
has been extracted from output_cmd_background
Diffstat (limited to 'sway/commands/input')
-rw-r--r-- | sway/commands/input/xkb_file.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sway/commands/input/xkb_file.c b/sway/commands/input/xkb_file.c index ef59bffc..493f94fb 100644 --- a/sway/commands/input/xkb_file.c +++ b/sway/commands/input/xkb_file.c @@ -1,7 +1,10 @@ #define _POSIX_C_SOURCE 200809L +#include <unistd.h> +#include <errno.h> #include "sway/config.h" #include "sway/commands.h" #include "log.h" +#include "stringop.h" struct cmd_results *input_cmd_xkb_file(int argc, char **argv) { struct cmd_results *error = NULL; @@ -18,6 +21,25 @@ struct cmd_results *input_cmd_xkb_file(int argc, char **argv) { ic->xkb_file = NULL; } else { ic->xkb_file = strdup(argv[0]); + if (!expand_path(&ic->xkb_file)) { + error = cmd_results_new(CMD_INVALID, "Invalid syntax (%s)", + ic->xkb_file); + free(ic->xkb_file); + ic->xkb_file = NULL; + return error; + } + if (!ic->xkb_file) { + sway_log(SWAY_ERROR, "Failed to allocate expanded path"); + return cmd_results_new(CMD_FAILURE, "Unable to allocate resource"); + } + + bool can_access = access(ic->xkb_file, F_OK) != -1; + if (!can_access) { + sway_log_errno(SWAY_ERROR, "Unable to access xkb file '%s'", + ic->xkb_file); + config_add_swaynag_warning("Unable to access xkb file '%s'", + ic->xkb_file); + } } ic->xkb_file_is_set = true; |