version 1.17, 2014/04/24 09:14:43 |
version 1.18, 2014/05/13 07:34:35 |
|
|
|
|
const struct cmd_entry cmd_set_buffer_entry = { |
const struct cmd_entry cmd_set_buffer_entry = { |
"set-buffer", "setb", |
"set-buffer", "setb", |
"ab:", 1, 1, |
"ab:n:", 0, 1, |
"[-a] " CMD_BUFFER_USAGE " data", |
"[-a] " CMD_BUFFER_USAGE " [-n new-buffer-name] data", |
0, |
0, |
NULL, |
NULL, |
cmd_set_buffer_exec |
cmd_set_buffer_exec |
|
|
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
u_int limit; |
|
char *pdata, *cause; |
char *pdata, *cause; |
|
const char *bufname; |
size_t psize, newsize; |
size_t psize, newsize; |
int buffer; |
|
|
|
limit = options_get_number(&global_options, "buffer-limit"); |
bufname = NULL; |
|
|
|
if (args_has(args, 'n')) { |
|
if (args->argc > 0) { |
|
cmdq_error(cmdq, "don't provide data with n flag"); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
|
|
if (args_has(args, 'b')) |
|
bufname = args_get(args, 'b'); |
|
|
|
if (bufname == NULL) { |
|
pb = paste_get_top(); |
|
if (pb == NULL) { |
|
cmdq_error(cmdq, "no buffer"); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
bufname = pb->name; |
|
} |
|
|
|
if (paste_rename(bufname, args_get(args, 'n'), &cause) != 0) { |
|
cmdq_error(cmdq, "%s", cause); |
|
free(cause); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
|
|
return (CMD_RETURN_NORMAL); |
|
} |
|
|
|
if (args->argc != 1) { |
|
cmdq_error(cmdq, "no data specified"); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
|
psize = 0; |
psize = 0; |
pdata = NULL; |
pdata = NULL; |
|
|
pb = NULL; |
pb = NULL; |
buffer = -1; |
|
|
|
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')) { |
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); |
bufname = args_get(args, 'b'); |
if (cause != NULL) { |
pb = paste_get_name(bufname); |
cmdq_error(cmdq, "buffer %s", cause); |
|
free(cause); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
pb = paste_get_index(buffer); |
|
if (pb == NULL) { |
|
cmdq_error(cmdq, "no buffer %d", buffer); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
} else if (args_has(args, 'a')) { |
} else if (args_has(args, 'a')) { |
pb = paste_get_top(); |
pb = paste_get_top(); |
if (pb != NULL) |
if (pb != NULL) |
buffer = 0; |
bufname = pb->name; |
} |
} |
|
|
if (args_has(args, 'a') && pb != NULL) { |
if (args_has(args, 'a') && pb != NULL) { |
|
|
memcpy(pdata + psize, args->argv[0], newsize); |
memcpy(pdata + psize, args->argv[0], newsize); |
psize += newsize; |
psize += newsize; |
|
|
if (buffer == -1) |
if (paste_set(pdata, psize, bufname, &cause) != 0) { |
paste_add(pdata, psize, limit); |
cmdq_error(cmdq, "%s", cause); |
else |
free(pdata); |
paste_replace(buffer, pdata, psize); |
free(cause); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |