summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2016-10-09 10:01:12 +0100
committerThomas Adam <thomas@xteddy.org>2016-10-09 10:01:12 +0100
commit526e860a7a831b9bab82623e64a1b30b2b1ca5e6 (patch)
treebfeffb74ca872c2ce929d7da28c42826b987e810
parentfb0b2cd37ab990d859d43912e4da143f5373d496 (diff)
parent1db6d6fea6158d8d0d05e59497e40a5cfc40d068 (diff)
Merge branch 'obsd-master'
-rw-r--r--cmd-if-shell.c16
-rw-r--r--cmd-run-shell.c2
-rw-r--r--cmd-set-option.c21
-rw-r--r--window-copy.c3
4 files changed, 36 insertions, 6 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);
}
diff --git a/cmd-run-shell.c b/cmd-run-shell.c
index 0bd8fc59..d87a061f 100644
--- a/cmd-run-shell.c
+++ b/cmd-run-shell.c
@@ -97,7 +97,7 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_q *cmdq)
shellcmd = format_expand(ft, args->argv[0]);
format_free(ft);
- cdata = xmalloc(sizeof *cdata);
+ cdata = xcalloc(1, sizeof *cdata);
cdata->cmd = shellcmd;
cdata->bflag = args_has(args, 'b');
cdata->wp_id = wp != NULL ? (int) wp->id : -1;
diff --git a/cmd-set-option.c b/cmd-set-option.c
index 491353a8..0f116b6f 100644
--- a/cmd-set-option.c
+++ b/cmd-set-option.c
@@ -232,6 +232,7 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char *optstr,
struct winlink *wl = cmdq->state.tflag.wl;
struct options *oo;
struct options_entry *o;
+ const char *target;
if (args_has(args, 's'))
oo = global_options;
@@ -239,12 +240,28 @@ cmd_set_option_user(struct cmd *self, struct cmd_q *cmdq, const char *optstr,
self->entry == &cmd_set_window_option_entry) {
if (args_has(self->args, 'g'))
oo = global_w_options;
- else
+ else if (wl == NULL) {
+ target = args_get(args, 't');
+ if (target != NULL) {
+ cmdq_error(cmdq, "no such window: %s",
+ target);
+ } else
+ cmdq_error(cmdq, "no current window");
+ return (CMD_RETURN_ERROR);
+ } else
oo = wl->window->options;
} else {
if (args_has(self->args, 'g'))
oo = global_s_options;
- else
+ else if (s == NULL) {
+ target = args_get(args, 't');
+ if (target != NULL) {
+ cmdq_error(cmdq, "no such session: %s",
+ target);
+ } else
+ cmdq_error(cmdq, "no current session");
+ return (CMD_RETURN_ERROR);
+ } else
oo = s->options;
}
diff --git a/window-copy.c b/window-copy.c
index 4c95ba66..f1379604 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -1288,7 +1288,8 @@ window_copy_write_line(struct window_pane *wp, struct screen_write_ctx *ctx,
xoff = size = xsnprintf(hdr, limit,
"Repeat: %d", data->numprefix);
} else {
- xoff = size = xsnprintf(hdr, limit,
+ /* We don't care about truncation. */
+ xoff = size = snprintf(hdr, limit,
"%s: %s", data->inputprompt, data->inputstr);
}
screen_write_cursormove(ctx, 0, last);