]> granicus.if.org Git - neomutt/commitdiff
Minor buffer handling code cleanup
authorKevin McCarthy <kevin@8t8.us>
Sun, 10 Mar 2019 01:58:07 +0000 (09:58 +0800)
committerRichard Russon <rich@flatcap.org>
Tue, 9 Apr 2019 11:54:27 +0000 (12:54 +0100)
Use mutt_buffer_len() and mutt_buffer_clear() to make the code a bit
clearer.  There are still places in the code that manipulate the
buffers directly (pattern.c, for example), but that doesn't mean we
shouldn't abstract the buffer where we can.

Add comments in a couple places where unusual buffer manipulation is
occurring.

Co-authored-by: Richard Russon <rich@flatcap.org>
email/parse.c
imap/command.c
imap/imap.c
imap/message.c
init.c
mutt/base64.c
muttlib.c

index d2ad032d1df6c1e1474c0e3a8f28497a1ec55e78..ad6b1936b509bde54abb7be61ac226fa18cf67ed 100644 (file)
@@ -1073,12 +1073,9 @@ struct Envelope *mutt_rfc822_read_header(FILE *fp, struct Email *e, bool user_hd
             mutt_buffer_addstr(env->spam, C_SpamSeparator);
             mutt_buffer_addstr(env->spam, buf);
           }
-
-          /* else overwrite */
-          else
+          else /* overwrite */
           {
-            env->spam->dptr = env->spam->data;
-            *env->spam->dptr = '\0';
+            mutt_buffer_reset(env->spam);
             mutt_buffer_addstr(env->spam, buf);
           }
         }
index fba3f985f4133aebfdb9b2e2342f5c24a46535a8..0d6e4ffcf0ed006a714b7e9951d0a597501a7e89 100644 (file)
@@ -200,12 +200,12 @@ static int cmd_start(struct ImapAccountData *adata, const char *cmdstr, ImapCmdF
   if (flags & IMAP_CMD_QUEUE)
     return 0;
 
-  if (adata->cmdbuf->dptr == adata->cmdbuf->data)
+  if (mutt_buffer_len(adata->cmdbuf) == 0)
     return IMAP_CMD_BAD;
 
   rc = mutt_socket_send_d(adata->conn, adata->cmdbuf->data,
                           (flags & IMAP_CMD_PASS) ? IMAP_LOG_PASS : IMAP_LOG_CMD);
-  adata->cmdbuf->dptr = adata->cmdbuf->data;
+  mutt_buffer_reset(adata->cmdbuf);
 
   /* unidle when command queue is flushed */
   if (adata->state == IMAP_IDLE)
index fdce9463ecb931dd9142e2c116be82839b226868..dcf87b4b7b9521fde5612cce3eeeb2e237f78be1 100644 (file)
@@ -192,7 +192,7 @@ static int make_msg_set(struct Mailbox *m, struct Buffer *buf, int flag,
 
   struct Email **emails = m->emails;
 
-  for (n = *pos; (n < m->msg_count) && ((buf->dptr - buf->data) < IMAP_MAX_CMDLEN); n++)
+  for (n = *pos; (n < m->msg_count) && (mutt_buffer_len(buf) < IMAP_MAX_CMDLEN); n++)
   {
     bool match = false; /* whether current message matches flag condition */
     /* don't include pending expunged messages.
@@ -1042,7 +1042,7 @@ int imap_exec_msgset(struct Mailbox *m, const char *pre, const char *post,
 
   do
   {
-    cmd->dptr = cmd->data;
+    mutt_buffer_reset(cmd);
     mutt_buffer_add_printf(cmd, "%s ", pre);
     rc = make_msg_set(m, cmd, flag, changed, invert, &pos);
     if (rc > 0)
@@ -1105,7 +1105,7 @@ int imap_sync_message_for_copy(struct Mailbox *m, struct Email *e,
   }
 
   snprintf(uid, sizeof(uid), "%u", imap_edata_get(e)->uid);
-  cmd->dptr = cmd->data;
+  mutt_buffer_reset(cmd);
   mutt_buffer_addstr(cmd, "UID STORE ");
   mutt_buffer_addstr(cmd, uid);
 
index b393e84da6b406c56721b1ec361cca31a4fcdb39..537e8bd759a3f3bef857ede5098fc1da99b339f5 100644 (file)
@@ -639,7 +639,7 @@ static void imap_fetch_msn_seqset(struct Buffer *b, struct ImapAccountData *adat
   /* Too big.  Just query the whole range then. */
   if ((chunks == 150) || (mutt_str_strlen(b->data) > 500))
   {
-    b->dptr = b->data;
+    mutt_buffer_reset(b);
     mutt_buffer_add_printf(b, "%u:%u", msn_begin, msn_end);
   }
 }
diff --git a/init.c b/init.c
index 899015830e7e020398cd4e9842f11dc3dedb4a32..93f4b6bc570ad5217db7ea9b7d428b739c1e1ba8 100644 (file)
--- a/init.c
+++ b/init.c
@@ -2665,8 +2665,7 @@ int mutt_extract_token(struct Buffer *dest, struct Buffer *tok, TokenFlags flags
   char qc = 0; /* quote char */
   char *pc = NULL;
 
-  /* reset the destination pointer to the beginning of the buffer */
-  dest->dptr = dest->data;
+  mutt_buffer_reset(dest);
 
   SKIPWS(tok->dptr);
   while ((ch = *tok->dptr))
@@ -3002,9 +3001,7 @@ int mutt_init(bool skip_sys_rc, struct ListHead *commands)
   struct Buffer err;
 
   mutt_buffer_init(&err);
-  err.dsize = 256;
-  err.data = mutt_mem_malloc(err.dsize);
-  err.dptr = err.data;
+  mutt_buffer_increase_size(&err, 256);
 
   mutt_grouplist_init();
   /* reverse alias keys need to be strdup'ed because of idna conversions */
index c1d01d48160ba5e439149218cc473ace8c6d3a08..c67613d63cdb873406604aad3176784ea9e7f29b 100644 (file)
@@ -201,6 +201,7 @@ int mutt_b64_buffer_decode(struct Buffer *buf, const char *in)
 {
   mutt_buffer_increase_size(buf, mutt_str_strlen(in));
   int olen = mutt_b64_decode(in, buf->data, buf->dsize);
+  /* mutt_from_base64 returns raw bytes, so don't terminate the buffer either */
   if (olen > 0)
     buf->dptr = buf->data + olen;
   else
index 77f813b8f0bf5f9d093286328d2cbc8c49794d7c..8d6253e9495ee780c228baa3f78b41ffba80691d 100644 (file)
--- a/muttlib.c
+++ b/muttlib.c
@@ -852,8 +852,10 @@ void mutt_expando_format(char *buf, size_t buflen, size_t col, int cols, const c
       strncpy(srccopy, src, n);
       srccopy[n - 1] = '\0';
 
-      /* prepare BUFFERs */
+      /* prepare Buffers */
       struct Buffer *srcbuf = mutt_buffer_from(srccopy);
+      /* note: we are resetting dptr and *reading* from the buffer, so we don't
+       * want to use mutt_buffer_reset(). */
       srcbuf->dptr = srcbuf->data;
       struct Buffer *word = mutt_buffer_new();
       struct Buffer *cmd = mutt_buffer_new();