diff options
author | Thomas Adam <thomas@xteddy.org> | 2017-02-14 20:01:12 +0000 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2017-02-14 20:01:12 +0000 |
commit | ba3c1534e08b495fc308ed0085148587e8ead3d0 (patch) | |
tree | a3161a2413826aeecaeca8b93b8abe7428163c6b /cmd-save-buffer.c | |
parent | 02e04477de73d01bb3ef12cb43a03cfc4c2e546c (diff) | |
parent | e340df2034c04591e3bbdcbcc22af1301cf74b09 (diff) | |
download | rtmux-ba3c1534e08b495fc308ed0085148587e8ead3d0.tar.gz rtmux-ba3c1534e08b495fc308ed0085148587e8ead3d0.tar.bz2 rtmux-ba3c1534e08b495fc308ed0085148587e8ead3d0.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'cmd-save-buffer.c')
-rw-r--r-- | cmd-save-buffer.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index 59ba0b89..ee59ad59 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -60,11 +60,10 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = self->args; struct client *c = item->client; - struct session *s; struct paste_buffer *pb; - const char *path, *bufname, *bufdata, *start, *end, *cwd; + const char *path, *bufname, *bufdata, *start, *end; const char *flags; - char *msg, *file, resolved[PATH_MAX]; + char *msg, *file; size_t size, used, msglen, bufsize; FILE *f; @@ -97,39 +96,26 @@ cmd_save_buffer_exec(struct cmd *self, struct cmdq_item *item) goto do_print; } - if (c != NULL && c->session == NULL && c->cwd != NULL) - cwd = c->cwd; - else if (c != NULL && (s = c->session) != NULL && s->cwd != NULL) - cwd = s->cwd; - else - cwd = "."; - flags = "wb"; if (args_has(self->args, 'a')) flags = "ab"; - if (*path == '/') - file = xstrdup(path); - else - xasprintf(&file, "%s/%s", cwd, path); - if (realpath(file, resolved) == NULL && - strlcpy(resolved, file, sizeof resolved) >= sizeof resolved) { - cmdq_error(item, "%s: %s", file, strerror(ENAMETOOLONG)); - return (CMD_RETURN_ERROR); - } - f = fopen(resolved, flags); - free(file); + file = server_client_get_path(c, path); + f = fopen(file, flags); if (f == NULL) { - cmdq_error(item, "%s: %s", resolved, strerror(errno)); + cmdq_error(item, "%s: %s", file, strerror(errno)); + free(file); return (CMD_RETURN_ERROR); } if (fwrite(bufdata, 1, bufsize, f) != bufsize) { - cmdq_error(item, "%s: write error", resolved); + cmdq_error(item, "%s: write error", file); fclose(f); return (CMD_RETURN_ERROR); } + fclose(f); + free(file); return (CMD_RETURN_NORMAL); |