]> granicus.if.org Git - mutt/commitdiff
Break buffer functions into separate source file.
authorKevin McCarthy <kevin@8t8.us>
Sat, 6 Oct 2018 19:43:17 +0000 (12:43 -0700)
committerKevin McCarthy <kevin@8t8.us>
Sat, 6 Oct 2018 19:43:17 +0000 (12:43 -0700)
Makefile.am
buffer.c [new file with mode: 0644]
buffer.h [new file with mode: 0644]
mutt.h
muttlib.c
protos.h

index 950b66b7e01392e820f871900639248d5401ba91..69bf62b76abd533618830faf1db08a5c0c288af0 100644 (file)
@@ -26,7 +26,7 @@ BUILT_SOURCES = keymap_defs.h patchlist.c reldate.h conststrings.c $(HCVERSION)
 
 bin_PROGRAMS = mutt $(DOTLOCK_TARGET) $(PGPAUX_TARGET)
 mutt_SOURCES = \
-       addrbook.c alias.c attach.c base64.c browser.c buffy.c color.c \
+       addrbook.c alias.c attach.c base64.c browser.c buffer.c buffy.c color.c \
        crypt.c cryptglue.c \
        commands.c complete.c compose.c copy.c curs_lib.c curs_main.c date.c \
        edit.c enter.c flags.c init.c filter.c from.c \
@@ -65,7 +65,8 @@ EXTRA_mutt_SOURCES = account.c bcache.c compress.c crypt-gpgme.c crypt-mod-pgp-c
 
 EXTRA_DIST = COPYRIGHT GPL OPS OPS.PGP OPS.CRYPT OPS.SMIME TODO UPDATING \
        configure account.h \
-       attach.h buffy.h charset.h compress.h copy.h crypthash.h dotlock.h functions.h gen_defs \
+       attach.h buffer.h buffy.h charset.h compress.h copy.h crypthash.h \
+       dotlock.h functions.h gen_defs \
        globals.h hash.h history.h init.h keymap.h mutt_crypt.h \
        mailbox.h mapping.h md5.h mime.h mutt.h mutt_curses.h mutt_menu.h \
        mutt_regex.h mutt_sasl.h mutt_socket.h mutt_ssl.h mutt_tunnel.h \
diff --git a/buffer.c b/buffer.c
new file mode 100644 (file)
index 0000000..d95cfe2
--- /dev/null
+++ b/buffer.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 1996-2002,2010,2013 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2004 g10 Code GmbH
+ * Copyright (C) 2018 Kevin J. McCarthy <kevin@8t8.us>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "mutt.h"
+#include "buffer.h"
+
+/* creates and initializes a BUFFER */
+BUFFER *mutt_buffer_new(void) {
+  BUFFER *b;
+
+  b = safe_malloc(sizeof(BUFFER));
+
+  mutt_buffer_init(b);
+
+  return b;
+}
+
+/* initialize a new BUFFER */
+BUFFER *mutt_buffer_init (BUFFER *b) {
+  memset(b, 0, sizeof(BUFFER));
+  return b;
+}
+
+/* Increases the allocated size of the buffer */
+void mutt_buffer_increase_size (BUFFER *buf, size_t new_size)
+{
+  size_t offset;
+
+  if (buf->dsize < new_size)
+  {
+    offset = buf->dptr - buf->data;
+    buf->dsize = new_size;
+    safe_realloc (&buf->data, buf->dsize);
+    buf->dptr = buf->data + offset;
+  }
+}
+
+/*
+ * Creates and initializes a BUFFER*. If passed an existing BUFFER*,
+ * just initializes. Frees anything already in the buffer. Copies in
+ * the seed string.
+ *
+ * Disregards the 'destroy' flag, which seems reserved for caller.
+ * This is bad, but there's no apparent protocol for it.
+ */
+BUFFER *mutt_buffer_from (char *seed) {
+  BUFFER *b;
+
+  if (!seed)
+    return NULL;
+
+  b = mutt_buffer_new ();
+  b->data = safe_strdup(seed);
+  b->dsize = mutt_strlen(seed);
+  b->dptr = (char *) b->data + b->dsize;
+  return b;
+}
+
+int mutt_buffer_printf (BUFFER* buf, const char* fmt, ...)
+{
+  va_list ap, ap_retry;
+  int len, blen, doff;
+  
+  va_start (ap, fmt);
+  va_copy (ap_retry, ap);
+
+  if (!buf->dptr)
+    buf->dptr = buf->data;
+
+  doff = buf->dptr - buf->data;
+  blen = buf->dsize - doff;
+  /* solaris 9 vsnprintf barfs when blen is 0 */
+  if (!blen)
+  {
+    blen = 128;
+    buf->dsize += blen;
+    safe_realloc (&buf->data, buf->dsize);
+    buf->dptr = buf->data + doff;
+  }
+  if ((len = vsnprintf (buf->dptr, blen, fmt, ap)) >= blen)
+  {
+    blen = ++len - blen;
+    if (blen < 128)
+      blen = 128;
+    buf->dsize += blen;
+    safe_realloc (&buf->data, buf->dsize);
+    buf->dptr = buf->data + doff;
+    len = vsnprintf (buf->dptr, len, fmt, ap_retry);
+  }
+  if (len > 0)
+    buf->dptr += len;
+
+  va_end (ap);
+  va_end (ap_retry);
+
+  return len;
+}
+
+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);
+}
+
+void mutt_buffer_free (BUFFER **p)
+{
+  if (!p || !*p) 
+    return;
+
+   FREE(&(*p)->data);
+   /* dptr is just an offset to data and shouldn't be freed */
+   FREE(p);            /* __FREE_CHECKED__ */
+}
+
+/* dynamically grows a BUFFER to accommodate 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_add (BUFFER* buf, const char* s, size_t len)
+{
+  size_t offset;
+
+  if (buf->dptr + len + 1 > buf->data + buf->dsize)
+  {
+    offset = buf->dptr - buf->data;
+    buf->dsize += len < 128 ? 128 : len + 1;
+    /* suppress compiler aliasing warning */
+    safe_realloc ((void**) (void*) &buf->data, buf->dsize);
+    buf->dptr = buf->data + offset;
+  }
+  memcpy (buf->dptr, s, len);
+  buf->dptr += len;
+  *(buf->dptr) = '\0';
+}
diff --git a/buffer.h b/buffer.h
new file mode 100644 (file)
index 0000000..a73600e
--- /dev/null
+++ b/buffer.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 1996-2002,2010,2013 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 2004 g10 Code GmbH
+ * Copyright (C) 2018 Kevin J. McCarthy <kevin@8t8.us>
+ *
+ *     This program is free software; you can redistribute it and/or modify
+ *     it under the terms of the GNU General Public License as published by
+ *     the Free Software Foundation; either version 2 of the License, or
+ *     (at your option) any later version.
+ *
+ *     This program is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public License
+ *     along with this program; if not, write to the Free Software
+ *     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef _BUFFER_H
+#define _BUFFER_H
+
+typedef struct
+{
+  char *data;  /* pointer to data */
+  char *dptr;  /* current read/write position */
+  size_t dsize;        /* length of data */
+  int destroy; /* destroy `data' when done? */
+} BUFFER;
+
+BUFFER *mutt_buffer_new (void);
+BUFFER * mutt_buffer_init (BUFFER *);
+void mutt_buffer_increase_size (BUFFER *, size_t);
+BUFFER * mutt_buffer_from (char *);
+void mutt_buffer_free(BUFFER **);
+int mutt_buffer_printf (BUFFER*, const char*, ...);
+void mutt_buffer_add (BUFFER*, const char*, size_t);
+void mutt_buffer_addstr (BUFFER*, const char*);
+void mutt_buffer_addch (BUFFER*, char);
+
+#endif
diff --git a/mutt.h b/mutt.h
index d541ae9a452fe10f073fa215abe2ecf0dd66a1da..90fe56483342ae25e29a1e9b71ae5b92f60f6ce5 100644 (file)
--- a/mutt.h
+++ b/mutt.h
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 1996-2002,2010,2013 Michael R. Elkins <me@mutt.org>
  * Copyright (C) 2004 g10 Code GmbH
@@ -63,6 +62,7 @@
 #include "rfc822.h"
 #include "hash.h"
 #include "charset.h"
+#include "buffer.h"
 
 #ifndef HAVE_WC_FUNCS
 # ifdef MB_LEN_MAX
@@ -126,14 +126,6 @@ struct timespec
 #define MUTT_TOKEN_COMMENT    (1<<5)  /* don't reap comments */
 #define MUTT_TOKEN_SEMICOLON  (1<<6)  /* don't treat ; as special */
 
-typedef struct
-{
-  char *data;  /* pointer to data */
-  char *dptr;  /* current read/write position */
-  size_t dsize;        /* length of data */
-  int destroy; /* destroy `data' when done? */
-} BUFFER;
-
 typedef struct
 {
   int ch; /* raw key pressed */
index 75495dee4bf3a1883d90bb222e55180b28e6740a..1d401581dcaae944a6514994fb2340dd1d8825ab 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -1788,138 +1788,6 @@ void mutt_sleep (short s)
     sleep(s);
 }
 
-/* creates and initializes a BUFFER */
-BUFFER *mutt_buffer_new(void) {
-  BUFFER *b;
-
-  b = safe_malloc(sizeof(BUFFER));
-
-  mutt_buffer_init(b);
-
-  return b;
-}
-
-/* initialize a new BUFFER */
-BUFFER *mutt_buffer_init (BUFFER *b) {
-  memset(b, 0, sizeof(BUFFER));
-  return b;
-}
-
-/* Increases the allocated size of the buffer */
-void mutt_buffer_increase_size (BUFFER *buf, size_t new_size)
-{
-  size_t offset;
-
-  if (buf->dsize < new_size)
-  {
-    offset = buf->dptr - buf->data;
-    buf->dsize = new_size;
-    safe_realloc (&buf->data, buf->dsize);
-    buf->dptr = buf->data + offset;
-  }
-}
-
-/*
- * Creates and initializes a BUFFER*. If passed an existing BUFFER*,
- * just initializes. Frees anything already in the buffer. Copies in
- * the seed string.
- *
- * Disregards the 'destroy' flag, which seems reserved for caller.
- * This is bad, but there's no apparent protocol for it.
- */
-BUFFER *mutt_buffer_from (char *seed) {
-  BUFFER *b;
-
-  if (!seed)
-    return NULL;
-
-  b = mutt_buffer_new ();
-  b->data = safe_strdup(seed);
-  b->dsize = mutt_strlen(seed);
-  b->dptr = (char *) b->data + b->dsize;
-  return b;
-}
-
-int mutt_buffer_printf (BUFFER* buf, const char* fmt, ...)
-{
-  va_list ap, ap_retry;
-  int len, blen, doff;
-  
-  va_start (ap, fmt);
-  va_copy (ap_retry, ap);
-
-  if (!buf->dptr)
-    buf->dptr = buf->data;
-
-  doff = buf->dptr - buf->data;
-  blen = buf->dsize - doff;
-  /* solaris 9 vsnprintf barfs when blen is 0 */
-  if (!blen)
-  {
-    blen = 128;
-    buf->dsize += blen;
-    safe_realloc (&buf->data, buf->dsize);
-    buf->dptr = buf->data + doff;
-  }
-  if ((len = vsnprintf (buf->dptr, blen, fmt, ap)) >= blen)
-  {
-    blen = ++len - blen;
-    if (blen < 128)
-      blen = 128;
-    buf->dsize += blen;
-    safe_realloc (&buf->data, buf->dsize);
-    buf->dptr = buf->data + doff;
-    len = vsnprintf (buf->dptr, len, fmt, ap_retry);
-  }
-  if (len > 0)
-    buf->dptr += len;
-
-  va_end (ap);
-  va_end (ap_retry);
-
-  return len;
-}
-
-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);
-}
-
-void mutt_buffer_free (BUFFER **p)
-{
-  if (!p || !*p) 
-    return;
-
-   FREE(&(*p)->data);
-   /* dptr is just an offset to data and shouldn't be freed */
-   FREE(p);            /* __FREE_CHECKED__ */
-}
-
-/* dynamically grows a BUFFER to accommodate 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_add (BUFFER* buf, const char* s, size_t len)
-{
-  size_t offset;
-
-  if (buf->dptr + len + 1 > buf->data + buf->dsize)
-  {
-    offset = buf->dptr - buf->data;
-    buf->dsize += len < 128 ? 128 : len + 1;
-    /* suppress compiler aliasing warning */
-    safe_realloc ((void**) (void*) &buf->data, buf->dsize);
-    buf->dptr = buf->data + offset;
-  }
-  memcpy (buf->dptr, s, len);
-  buf->dptr += len;
-  *(buf->dptr) = '\0';
-}
-
 /* Decrease a file's modification time by 1 second */
 
 time_t mutt_decrease_mtime (const char *f, struct stat *st)
index a137dd14660a5c4c81156cd0d9bcdae42a0ccde9..ef9e7f40a4b70b98a62a80f9c515ba9733fbb493 100644 (file)
--- a/protos.h
+++ b/protos.h
@@ -39,15 +39,6 @@ struct hdr_format_info
 void mutt_make_string_info (char *, size_t, int, const char *, struct hdr_format_info *, format_flag);
 
 int mutt_extract_token (BUFFER *, BUFFER *, int);
-BUFFER *mutt_buffer_new (void);
-BUFFER * mutt_buffer_init (BUFFER *);
-void mutt_buffer_increase_size (BUFFER *, size_t);
-BUFFER * mutt_buffer_from (char *);
-void mutt_buffer_free(BUFFER **);
-int mutt_buffer_printf (BUFFER*, const char*, ...);
-void mutt_buffer_add (BUFFER*, const char*, size_t);
-void mutt_buffer_addstr (BUFFER*, const char*);
-void mutt_buffer_addch (BUFFER*, char);
 void mutt_free_opts (void);
 
 #define mutt_system(x) _mutt_system(x,0)