]> granicus.if.org Git - neomutt/commitdiff
Unified buffer handling, from Brendan Cully.
authorThomas Roessler <roessler@does-not-exist.org>
Tue, 3 Jul 2001 19:31:59 +0000 (19:31 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Tue, 3 Jul 2001 19:31:59 +0000 (19:31 +0000)
init.c
muttlib.c
protos.h

diff --git a/init.c b/init.c
index 792b16c8e8705b27cf6825200cde91f202e5686d..4130f395ab378df1a5817a08500bdae3a0428b79 100644 (file)
--- 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;
 }
index 717d9613ed853fe477522614563324b40420b358..defdd9e8c456666db5836c00a1c1dd287fb614eb 100644 (file)
--- 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)
   {
index 396bbb46b71769a1c09f62c2f1360bc641ab1988..85c7c388bfd0b6ec0115df0eeb9db0220f508eb8 100644 (file)
--- 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);