use m_strdup and m_strlen that are inlined for efficiency
[apps/madmutt.git] / edit.c
diff --git a/edit.c b/edit.c
index fd1eeb2..e1bc6df 100644 (file)
--- a/edit.c
+++ b/edit.c
@@ -1,19 +1,10 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
- * 
- *     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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 /* Close approximation of the mailx(1) builtin editor for sending mail. */
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/macros.h>
+
 #include "mutt.h"
+#include "ascii.h"
+#include "enter.h"
 #include "mutt_curses.h"
 #include "mutt_idna.h"
 
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -38,7 +36,7 @@
  * SLcurses_waddnstr() can't take a "const char *", so this is only
  * declared "static" (sigh)
  */
-static char *EditorHelp = N_("\
+static const char *EditorHelp = N_("\
 ~~             insert a line begining with a single ~\n\
 ~b users       add users to the Bcc: field\n\
 ~c users       add users to the Cc: field\n\
@@ -59,7 +57,7 @@ static char *EditorHelp = N_("\
 .              on a line by itself ends input\n");
 
 static char **be_snarf_data (FILE * f, char **buf, int *bufmax, int *buflen,
-                             int offset, int bytes, int prefix)
+                             off_t offset, int bytes, int prefix)
 {
   char tmp[HUGE_STRING];
   char *p = tmp;
@@ -68,22 +66,22 @@ static char **be_snarf_data (FILE * f, char **buf, int *bufmax, int *buflen,
   tmp[sizeof (tmp) - 1] = 0;
   if (prefix) {
     strfcpy (tmp, NONULL (Prefix), sizeof (tmp));
-    tmplen = mutt_strlen (tmp);
+    tmplen = m_strlen(tmp);
     p = tmp + tmplen;
     tmplen = sizeof (tmp) - tmplen;
   }
 
-  fseek (f, offset, 0);
+  fseeko (f, offset, 0);
   while (bytes > 0) {
     if (fgets (p, tmplen - 1, f) == NULL)
       break;
-    bytes -= mutt_strlen (p);
+    bytes -= m_strlen(p);
     if (*bufmax == *buflen)
-      safe_realloc (&buf, sizeof (char *) * (*bufmax += 25));
-    buf[(*buflen)++] = safe_strdup (tmp);
+      p_realloc(&buf, *bufmax += 25);
+    buf[(*buflen)++] = m_strdup(tmp);
   }
   if (buf && *bufmax == *buflen) {      /* Do not smash memory past buf */
-    safe_realloc (&buf, sizeof (char *) * (++*bufmax));
+    p_realloc(&buf, ++*bufmax);
   }
   if (buf)
     buf[*buflen] = NULL;
@@ -135,9 +133,9 @@ static int be_barf_file (const char *path, char **buf, int buflen)
 static void be_free_memory (char **buf, int buflen)
 {
   while (buflen-- > 0)
-    FREE (&buf[buflen]);
+    p_delete(&buf[buflen]);
   if (buf)
-    FREE (&buf);
+    p_delete(&buf);
 }
 
 static char **be_include_messages (char *msg, char **buf, int *bufmax,
@@ -159,8 +157,8 @@ static char **be_include_messages (char *msg, char **buf, int *bufmax,
       }
 
       if (*bufmax == *buflen)
-        safe_realloc (&buf, sizeof (char *) * (*bufmax += 25));
-      buf[(*buflen)++] = safe_strdup (tmp);
+        p_realloc(&buf, *bufmax += 25);
+      buf[(*buflen)++] = m_strdup(tmp);
 
       bytes = Context->hdrs[n]->content->length;
       if (inc_hdrs) {
@@ -173,8 +171,8 @@ static char **be_include_messages (char *msg, char **buf, int *bufmax,
                            pfx);
 
       if (*bufmax == *buflen)
-        safe_realloc (&buf, sizeof (char *) * (*bufmax += 25));
-      buf[(*buflen)++] = safe_strdup ("\n");
+        p_realloc(&buf, *bufmax += 25);
+      buf[(*buflen)++] = m_strdup("\n");
     }
     else
       printw (_("%d: invalid message number.\n"), n);
@@ -250,7 +248,7 @@ static void be_edit_header (ENVELOPE * e, int force)
     addstr ("Subject: ");
     strfcpy (tmp, e->subject ? e->subject : "", sizeof (tmp));
     if (mutt_enter_string (tmp, sizeof (tmp), LINES - 1, 9, 0) == 0)
-      mutt_str_replace (&e->subject, tmp);
+      str_replace (&e->subject, tmp);
     addch ('\n');
   }
 
@@ -321,7 +319,7 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
 
     if (EscChar && tmp[0] == EscChar[0] && tmp[1] != EscChar[0]) {
       /* remove trailing whitespace from the line */
-      p = tmp + mutt_strlen (tmp) - 1;
+      p = tmp + m_strlen(tmp) - 1;
       while (p >= tmp && ISSPACE (*p))
         *p-- = 0;
 
@@ -350,9 +348,9 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
         if (Context) {
           if (!*p && cur) {
             /* include the current message */
-            p = tmp + mutt_strlen (tmp) + 1;
-            snprintf (tmp + mutt_strlen (tmp),
-                      sizeof (tmp) - mutt_strlen (tmp), " %d",
+            p = tmp + m_strlen(tmp) + 1;
+            snprintf (tmp + m_strlen(tmp),
+                      sizeof (tmp) - m_strlen(tmp), " %d",
                       cur->msgno + 1);
           }
           buf = be_include_messages (p, buf, &bufmax, &buflen,
@@ -384,7 +382,7 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
           addstr (_("missing filename.\n"));
         break;
       case 's':
-        mutt_str_replace (&msg->env->subject, p);
+        str_replace (&msg->env->subject, p);
         break;
       case 't':
         msg->env->to = rfc822_parse_adrlist (msg->env->to, p);
@@ -394,8 +392,8 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
         if (buflen) {
           buflen--;
           strfcpy (tmp, buf[buflen], sizeof (tmp));
-          tmp[mutt_strlen (tmp) - 1] = 0;
-          FREE (&buf[buflen]);
+          tmp[m_strlen(tmp) - 1] = 0;
+          p_delete(&buf[buflen]);
           buf[buflen] = NULL;
           continue;
         }
@@ -406,7 +404,7 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
       case 'e':
       case 'v':
         if (be_barf_file (path, buf, buflen) == 0) {
-          char *tag, *err;
+          const char *tag, *err;
 
           be_free_memory (buf, buflen);
           buf = NULL;
@@ -438,13 +436,13 @@ int mutt_builtin_editor (const char *path, HEADER * msg, HEADER * cur)
         break;
       }
     }
-    else if (mutt_strcmp (".", tmp) == 0)
+    else if (str_cmp (".", tmp) == 0)
       done = 1;
     else {
-      safe_strcat (tmp, sizeof (tmp), "\n");
+      str_cat (tmp, sizeof (tmp), "\n");
       if (buflen == bufmax)
-        safe_realloc (&buf, sizeof (char *) * (bufmax += 25));
-      buf[buflen++] = safe_strdup (tmp[1] == '~' ? tmp + 1 : tmp);
+        p_realloc(&buf, bufmax += 25);
+      buf[buflen++] = m_strdup(tmp[1] == '~' ? tmp + 1 : tmp);
     }
 
     tmp[0] = 0;