From 6d82a5632b1a639afcf4c0778d8e5760d5cf0f72 Mon Sep 17 00:00:00 2001 From: Thomas Roessler Date: Tue, 3 Jul 2001 19:31:59 +0000 Subject: [PATCH] Unified buffer handling, from Brendan Cully. --- init.c | 62 ++++++++++++++----------------------------------------- muttlib.c | 16 ++++++++++---- protos.h | 2 ++ 3 files changed, 30 insertions(+), 50 deletions(-) diff --git a/init.c b/init.c index 792b16c8e..4130f395a 100644 --- a/init.c +++ b/init.c @@ -105,36 +105,6 @@ int mutt_option_index (char *s) return (-1); } -static void add_char (BUFFER *buf, char ch) -{ - size_t offset; - - if (buf->dptr >= buf->data + buf->dsize) - { - offset = buf->dptr - buf->data; - buf->dsize += 4; - safe_realloc ((void **) &buf->data, buf->dsize); - buf->dptr = buf->data + offset; - } - *buf->dptr++ = ch; -} - -static void add_str (BUFFER *buf, const char *s) -{ - size_t slen = mutt_strlen (s); - size_t offset; - - if (buf->dptr + slen > buf->data + buf->dsize) - { - offset = buf->dptr - buf->data; - buf->dsize += slen; - safe_realloc ((void **) &buf->data, buf->dsize); - buf->dptr = buf->data + offset; - } - memcpy (buf->dptr, s, slen); - buf->dptr += slen; -} - int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags) { char ch; @@ -169,23 +139,23 @@ int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags) { case 'c': case 'C': - add_char (dest, (toupper (*tok->dptr) - '@') & 0x7f); + mutt_buffer_addch (dest, (toupper (*tok->dptr) - '@') & 0x7f); tok->dptr++; break; case 'r': - add_char (dest, '\r'); + mutt_buffer_addch (dest, '\r'); break; case 'n': - add_char (dest, '\n'); + mutt_buffer_addch (dest, '\n'); break; case 't': - add_char (dest, '\t'); + mutt_buffer_addch (dest, '\t'); break; case 'f': - add_char (dest, '\f'); + mutt_buffer_addch (dest, '\f'); break; case 'e': - add_char (dest, '\033'); + mutt_buffer_addch (dest, '\033'); break; default: if (isdigit ((unsigned char) ch) && @@ -193,26 +163,26 @@ int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags) isdigit ((unsigned char) *(tok->dptr + 1))) { - add_char (dest, (ch << 6) + (*tok->dptr << 3) + *(tok->dptr + 1) - 3504); + mutt_buffer_addch (dest, (ch << 6) + (*tok->dptr << 3) + *(tok->dptr + 1) - 3504); tok->dptr += 2; } else - add_char (dest, ch); + mutt_buffer_addch (dest, ch); } } else if (ch == '^' && (flags & M_TOKEN_CONDENSE)) { ch = *tok->dptr++; if (ch == '^') - add_char (dest, ch); + mutt_buffer_addch (dest, ch); else if (ch == '[') - add_char (dest, '\033'); + mutt_buffer_addch (dest, '\033'); else if (isalpha ((unsigned char) ch)) - add_char (dest, toupper (ch) - '@'); + mutt_buffer_addch (dest, toupper (ch) - '@'); else { - add_char (dest, '^'); - add_char (dest, ch); + mutt_buffer_addch (dest, '^'); + mutt_buffer_addch (dest, ch); } } else if (ch == '`' && (!qc || qc == '"')) @@ -293,13 +263,13 @@ int mutt_extract_token (BUFFER *dest, BUFFER *tok, int flags) tok->dptr = pc; } if ((env = getenv (var))) - add_str (dest, env); + mutt_buffer_addstr (dest, env); FREE (&var); } else - add_char (dest, ch); + mutt_buffer_addch (dest, ch); } - add_char (dest, 0); /* terminate the string */ + mutt_buffer_addch (dest, 0); /* terminate the string */ SKIPWS (tok->dptr); return 0; } diff --git a/muttlib.c b/muttlib.c index 717d9613e..defdd9e8c 100644 --- a/muttlib.c +++ b/muttlib.c @@ -1227,14 +1227,22 @@ void mutt_sleep (short s) sleep (s); } +void mutt_buffer_addstr (BUFFER* buf, const char* s) +{ + mutt_buffer_add (buf, s, mutt_strlen (s)); +} + +void mutt_buffer_addch (BUFFER* buf, char c) +{ + mutt_buffer_add (buf, &c, 1); +} + /* dynamically grows a BUFFER to accomodate s, in increments of 128 bytes. * Always one byte bigger than necessary for the null terminator, and * the buffer is always null-terminated */ -void mutt_buffer_addstr (BUFFER* buf, const char* s) +void mutt_buffer_add (BUFFER* buf, const char* s, size_t len) { - size_t len, offset; - - len = mutt_strlen (s); + size_t offset; if (buf->dptr + len + 1 > buf->data + buf->dsize) { diff --git a/protos.h b/protos.h index 396bbb46b..85c7c388b 100644 --- a/protos.h +++ b/protos.h @@ -37,7 +37,9 @@ void _mutt_make_string (char *, size_t, const char *, CONTEXT *, HEADER *, format_flag); int mutt_extract_token (BUFFER *, BUFFER *, int); +void mutt_buffer_add (BUFFER*, const char*, size_t); void mutt_buffer_addstr (BUFFER*, const char*); +void mutt_buffer_addch (BUFFER*, char); #define mutt_system(x) _mutt_system(x,0) int _mutt_system (const char *, int); -- 2.40.0