From 1958bfea3355304f47bd6dd2cc20b58b8c4b0f3e Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 9 Feb 2010 14:51:10 +0100 Subject: [PATCH] No fixed size buffers for ZOOM shell - bug #3257 --- zoom/zoomsh.c | 112 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/zoom/zoomsh.c b/zoom/zoomsh.c index c2a9381..466633e 100644 --- a/zoom/zoomsh.c +++ b/zoom/zoomsh.c @@ -11,6 +11,7 @@ #include #include #include +#include #if HAVE_READLINE_READLINE_H #include @@ -57,20 +58,17 @@ static int next_token(const char **cpp, const char **t_start) return len; /* return -1 if no token was read .. */ } -static int next_token_copy(const char **cpp, char *buf_out, int buf_max) +static WRBUF next_token_new_wrbuf(const char **cpp) { + WRBUF w = 0; const char *start; int len = next_token(cpp, &start); if (len < 0) - { - *buf_out = 0; - return len; - } - if (len >= buf_max) - len = buf_max-1; - memcpy(buf_out, start, len); - buf_out[len] = '\0'; - return len; + return 0; + w = wrbuf_alloc(); + if (len > 0) + wrbuf_write(w, start, len); + return w; } static int is_command(const char *cmd_str, const char *this_str, int this_len) @@ -87,32 +85,37 @@ static void cmd_set(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { - char key[40], val[80]; + WRBUF key, val; - if (next_token_copy(args, key, sizeof(key)) < 0) + if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for set\n"); return ; } - if (next_token_copy(args, val, sizeof(val)) < 0) - ZOOM_options_set(options, key, 0); + if ((val = next_token_new_wrbuf(args))) + { + ZOOM_options_set(options, wrbuf_cstr(key), wrbuf_cstr(val)); + wrbuf_destroy(val); + } else - ZOOM_options_set(options, key, val); + ZOOM_options_set(options, wrbuf_cstr(key), 0); + wrbuf_destroy(key); } static void cmd_get(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { - char key[40]; - if (next_token_copy(args, key, sizeof(key)) < 0) + WRBUF key; + if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for get\n"); } else { - const char *val = ZOOM_options_get(options, key); - printf("%s = %s\n", key, val ? val : ""); + const char *val = ZOOM_options_get(options, wrbuf_cstr(key)); + printf("%s = %s\n", wrbuf_cstr(key), val ? val : ""); + wrbuf_destroy(key); } } @@ -120,8 +123,8 @@ static void cmd_rget(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { - char key[40]; - if (next_token_copy(args, key, sizeof(key)) < 0) + WRBUF key; + if (!(key = next_token_new_wrbuf(args))) { printf("missing argument for get\n"); } @@ -134,9 +137,10 @@ static void cmd_rget(ZOOM_connection *c, ZOOM_resultset *r, if (!r[i]) continue; - val = ZOOM_resultset_option_get(r[i], key); - printf("%s = %s\n", key, val ? val : ""); + val = ZOOM_resultset_option_get(r[i], wrbuf_cstr(key)); + printf("%s = %s\n", wrbuf_cstr(key), val ? val : ""); } + wrbuf_destroy(key); } } @@ -144,26 +148,28 @@ static void cmd_close(ZOOM_connection *c, ZOOM_resultset *r, ZOOM_options options, const char **args) { - char host[60]; + WRBUF host; int i; - next_token_copy(args, host, sizeof(host)); + host = next_token_new_wrbuf(args); for (i = 0; i 0) - start = atoi(start_str); - - if (next_token_copy(args, count_str, sizeof(count_str)) > 0) - count = atoi(count_str); - - if (next_token_copy(args, render_str, sizeof(render_str)) > 0) - type = render_str; + WRBUF tmp; + + if ((tmp = next_token_new_wrbuf(args))) + { + start = atoi(wrbuf_cstr(tmp)); + wrbuf_destroy(tmp); + } + + if ((tmp = next_token_new_wrbuf(args))) + { + count = atoi(wrbuf_cstr(tmp)); + wrbuf_destroy(tmp); + } + render_str = next_token_new_wrbuf(args); } + if (render_str) + type = wrbuf_cstr(render_str); for (i = 0; i < MAX_CON; i++) ZOOM_resultset_records(r[i], 0, start, count); @@ -263,6 +276,9 @@ static void cmd_show(ZOOM_connection *c, ZOOM_resultset *r, display_records(c[i], r[i], start, count, type); } } + if (render_str) + wrbuf_destroy(render_str); + } static void cmd_ext(ZOOM_connection *c, ZOOM_resultset *r, @@ -270,19 +286,15 @@ static void cmd_ext(ZOOM_connection *c, ZOOM_resultset *r, const char **args) { ZOOM_package p[MAX_CON]; - char ext_type_str[10]; - int i; - - if (next_token_copy(args, ext_type_str, sizeof(ext_type_str)) < 0) - return; + WRBUF ext_type_str = next_token_new_wrbuf(args); for (i = 0; i