=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-save-buffer.c,v retrieving revision 1.41 retrieving revision 1.42 diff -c -r1.41 -r1.42 *** src/usr.bin/tmux/cmd-save-buffer.c 2017/01/06 13:26:09 1.41 --- src/usr.bin/tmux/cmd-save-buffer.c 2017/02/14 18:13:05 1.42 *************** *** 1,4 **** ! /* $OpenBSD: cmd-save-buffer.c,v 1.41 2017/01/06 13:26:09 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha --- 1,4 ---- ! /* $OpenBSD: cmd-save-buffer.c,v 1.42 2017/02/14 18:13:05 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha *************** *** 61,71 **** { 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 *flags; ! char *msg, *file, resolved[PATH_MAX]; size_t size, used, msglen, bufsize; FILE *f; --- 61,70 ---- { struct args *args = self->args; struct client *c = item->client; struct paste_buffer *pb; ! const char *path, *bufname, *bufdata, *start, *end; const char *flags; ! char *msg, *file; size_t size, used, msglen, bufsize; FILE *f; *************** *** 98,136 **** 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); if (f == NULL) { ! cmdq_error(item, "%s: %s", resolved, strerror(errno)); return (CMD_RETURN_ERROR); } if (fwrite(bufdata, 1, bufsize, f) != bufsize) { ! cmdq_error(item, "%s: write error", resolved); fclose(f); return (CMD_RETURN_ERROR); } fclose(f); return (CMD_RETURN_NORMAL); --- 97,122 ---- goto do_print; } flags = "wb"; if (args_has(self->args, 'a')) flags = "ab"; ! file = server_client_get_path(c, path); ! f = fopen(file, flags); if (f == NULL) { ! 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", file); fclose(f); return (CMD_RETURN_ERROR); } + fclose(f); + free(file); return (CMD_RETURN_NORMAL);