summaryrefslogtreecommitdiffstats
path: root/cmd-if-shell.c
diff options
context:
space:
mode:
authornicm <nicm>2016-10-09 08:06:51 +0000
committernicm <nicm>2016-10-09 08:06:51 +0000
commit1db6d6fea6158d8d0d05e59497e40a5cfc40d068 (patch)
tree41b26060a92f19ee78172a0a1d5849e23f3715a3 /cmd-if-shell.c
parent48dd250af1ee7d097ed89ad793428a4ce139f381 (diff)
Pass file/line to new command for if-shell so that errors appear
sensibly.
Diffstat (limited to 'cmd-if-shell.c')
-rw-r--r--cmd-if-shell.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/cmd-if-shell.c b/cmd-if-shell.c
index 7d3e8e12..3dc20cd1 100644
--- a/cmd-if-shell.c
+++ b/cmd-if-shell.c
@@ -50,6 +50,9 @@ const struct cmd_entry cmd_if_shell_entry = {
};
struct cmd_if_shell_data {
+ char *file;
+ u_int line;
+
char *cmd_if;
char *cmd_else;
@@ -106,7 +109,11 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
return (CMD_RETURN_NORMAL);
}
- cdata = xmalloc(sizeof *cdata);
+ cdata = xcalloc(1, sizeof *cdata);
+ if (self->file != NULL) {
+ cdata->file = xstrdup(self->file);
+ cdata->line = self->line;
+ }
cdata->cmd_if = xstrdup(args->argv[1]);
if (args->argc == 3)
@@ -148,7 +155,8 @@ cmd_if_shell_callback(struct job *job)
if (cmd == NULL)
return;
- if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) {
+ if (cmd_string_parse(cmd, &cmdlist, cdata->file, cdata->line,
+ &cause) != 0) {
if (cause != NULL) {
cmdq_error(cmdq, "%s", cause);
free(cause);
@@ -184,6 +192,8 @@ cmd_if_shell_done(struct cmd_q *cmdq1)
free(cdata->cmd_else);
free(cdata->cmd_if);
+
+ free(cdata->file);
free(cdata);
}
@@ -201,5 +211,7 @@ cmd_if_shell_free(void *data)
free(cdata->cmd_else);
free(cdata->cmd_if);
+
+ free(cdata->file);
free(cdata);
}