version 1.20, 2014/10/20 22:29:25 |
version 1.21, 2015/08/29 09:25:00 |
|
|
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
char *pdata, *cause; |
char *bufdata, *cause; |
const char *bufname; |
const char *bufname, *olddata; |
size_t psize, newsize; |
size_t bufsize, newsize; |
|
|
bufname = NULL; |
bufname = NULL; |
|
|
|
|
bufname = args_get(args, 'b'); |
bufname = args_get(args, 'b'); |
|
|
if (bufname == NULL) { |
if (bufname == NULL) { |
pb = paste_get_top(); |
pb = paste_get_top(&bufname); |
if (pb == NULL) { |
if (pb == NULL) { |
cmdq_error(cmdq, "no buffer"); |
cmdq_error(cmdq, "no buffer"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
bufname = pb->name; |
|
} |
} |
|
|
if (paste_rename(bufname, args_get(args, 'n'), &cause) != 0) { |
if (paste_rename(bufname, args_get(args, 'n'), &cause) != 0) { |
|
|
cmdq_error(cmdq, "no data specified"); |
cmdq_error(cmdq, "no data specified"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
psize = 0; |
|
pdata = NULL; |
|
|
|
pb = NULL; |
pb = NULL; |
|
|
|
bufsize = 0; |
|
bufdata = NULL; |
|
|
if ((newsize = strlen(args->argv[0])) == 0) |
if ((newsize = strlen(args->argv[0])) == 0) |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
|
if (args_has(args, 'b')) { |
if (args_has(args, 'b')) { |
bufname = args_get(args, 'b'); |
bufname = args_get(args, 'b'); |
pb = paste_get_name(bufname); |
pb = paste_get_name(bufname); |
} else if (args_has(args, 'a')) { |
} else if (args_has(args, 'a')) |
pb = paste_get_top(); |
pb = paste_get_top(&bufname); |
if (pb != NULL) |
|
bufname = pb->name; |
|
} |
|
|
|
if (args_has(args, 'a') && pb != NULL) { |
if (args_has(args, 'a') && pb != NULL) { |
psize = pb->size; |
olddata = paste_buffer_data(pb, &bufsize); |
pdata = xmalloc(psize); |
bufdata = xmalloc(bufsize); |
memcpy(pdata, pb->data, psize); |
memcpy(bufdata, olddata, bufsize); |
} |
} |
|
|
pdata = xrealloc(pdata, psize + newsize); |
bufdata = xrealloc(bufdata, bufsize + newsize); |
memcpy(pdata + psize, args->argv[0], newsize); |
memcpy(bufdata + bufsize, args->argv[0], newsize); |
psize += newsize; |
bufsize += newsize; |
|
|
if (paste_set(pdata, psize, bufname, &cause) != 0) { |
if (paste_set(bufdata, bufsize, bufname, &cause) != 0) { |
cmdq_error(cmdq, "%s", cause); |
cmdq_error(cmdq, "%s", cause); |
free(pdata); |
free(bufdata); |
free(cause); |
free(cause); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |