aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-11-11 11:50:26 +0000
committerGuy Harris <guy@alum.mit.edu>2004-11-11 11:50:26 +0000
commit196e04bf74fd6e7094cacd4e86b38f10ff12f825 (patch)
tree077e46a67ffe4100678187001fd9a5d8faff4db6
parent384cbd69772a243a2c60bf34ddbbcba5a40c4d4b (diff)
downloadwireshark-196e04bf74fd6e7094cacd4e86b38f10ff12f825.tar.gz
wireshark-196e04bf74fd6e7094cacd4e86b38f10ff12f825.tar.bz2
wireshark-196e04bf74fd6e7094cacd4e86b38f10ff12f825.zip
As per Sebastian Felis, don't assume that doubling the size of the line
buffer will necessarily be sufficient to make it big enough to handle what's being added to the buffer - continue doubling the size until it is. Put the code to maintain the line buffer into a routine. As that buffer is maintained as being large enough to handle what's being put into it, there's no need to use "snprintf()" to print into it. svn path=/trunk/; revision=12508
-rw-r--r--tethereal.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/tethereal.c b/tethereal.c
index 7e43d42e45..6f42afa895 100644
--- a/tethereal.c
+++ b/tethereal.c
@@ -2715,19 +2715,37 @@ write_preamble(capture_file *cf)
}
}
+static char *
+get_line_buf(size_t len)
+{
+ static char *line_bufp = NULL;
+ static size_t line_buf_len = 256;
+ size_t new_line_buf_len;
+
+ for (new_line_buf_len = line_buf_len; len > new_line_buf_len;
+ new_line_buf_len *= 2)
+ ;
+ if (line_bufp == NULL) {
+ line_buf_len = new_line_buf_len;
+ line_bufp = g_malloc(line_buf_len + 1);
+ } else {
+ if (new_line_buf_len > line_buf_len) {
+ line_buf_len = new_line_buf_len;
+ line_bufp = g_realloc(line_bufp, line_buf_len + 1);
+ }
+ }
+ return line_bufp;
+}
+
static gboolean
print_columns(capture_file *cf)
{
- static char *line_bufp = NULL;
- static size_t line_buf_len = 0;
+ char *line_bufp;
int i;
size_t buf_offset;
size_t column_len;
- if (line_bufp == NULL) {
- line_buf_len = 256;
- line_bufp = g_malloc(line_buf_len + 1);
- }
+ line_bufp = get_line_buf(256);
buf_offset = 0;
*line_bufp = '\0';
for (i = 0; i < cf->cinfo.num_cols; i++) {
@@ -2749,11 +2767,8 @@ print_columns(capture_file *cf)
column_len = strlen(cf->cinfo.col_data[i]);
if (column_len < 3)
column_len = 3;
- if (buf_offset + column_len > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
- snprintf(line_bufp + buf_offset, COL_MAX_LEN+1, "%3s", cf->cinfo.col_data[i]);
+ line_bufp = get_line_buf(buf_offset + column_len);
+ sprintf(line_bufp + buf_offset, "%3s", cf->cinfo.col_data[i]);
break;
case COL_CLS_TIME:
@@ -2763,11 +2778,8 @@ print_columns(capture_file *cf)
column_len = strlen(cf->cinfo.col_data[i]);
if (column_len < 10)
column_len = 10;
- if (buf_offset + column_len > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
- snprintf(line_bufp + buf_offset, COL_MAX_LEN+1, "%10s", cf->cinfo.col_data[i]);
+ line_bufp = get_line_buf(buf_offset + column_len);
+ sprintf(line_bufp + buf_offset, "%10s", cf->cinfo.col_data[i]);
break;
case COL_DEF_SRC:
@@ -2782,11 +2794,8 @@ print_columns(capture_file *cf)
column_len = strlen(cf->cinfo.col_data[i]);
if (column_len < 12)
column_len = 12;
- if (buf_offset + column_len > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
- snprintf(line_bufp + buf_offset, COL_MAX_LEN+1, "%12s", cf->cinfo.col_data[i]);
+ line_bufp = get_line_buf(buf_offset + column_len);
+ sprintf(line_bufp + buf_offset, "%12s", cf->cinfo.col_data[i]);
break;
case COL_DEF_DST:
@@ -2801,19 +2810,13 @@ print_columns(capture_file *cf)
column_len = strlen(cf->cinfo.col_data[i]);
if (column_len < 12)
column_len = 12;
- if (buf_offset + column_len > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
- snprintf(line_bufp + buf_offset, COL_MAX_LEN+1, "%-12s", cf->cinfo.col_data[i]);
+ line_bufp = get_line_buf(buf_offset + column_len);
+ sprintf(line_bufp + buf_offset, "%-12s", cf->cinfo.col_data[i]);
break;
default:
column_len = strlen(cf->cinfo.col_data[i]);
- if (buf_offset + column_len > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
+ line_bufp = get_line_buf(buf_offset + column_len);
strcat(line_bufp + buf_offset, cf->cinfo.col_data[i]);
break;
}
@@ -2833,10 +2836,7 @@ print_columns(capture_file *cf)
* We add enough space to the buffer for " <- " or " -> ",
* even if we're only adding " ".
*/
- if (buf_offset + 4 > line_buf_len) {
- line_buf_len *= 2;
- line_bufp = g_realloc(line_bufp, line_buf_len + 1);
- }
+ line_bufp = get_line_buf(buf_offset + 4);
switch (cf->cinfo.col_fmt[i]) {
case COL_DEF_SRC: