begin to rework mailcap parsing a "bit".
[apps/madmutt.git] / rfc3676.c
index 650fc50..51b6450 100644 (file)
--- a/rfc3676.c
+++ b/rfc3676.c
 #include <sys/wait.h>
 #include <sys/stat.h>
 
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/macros.h>
+#include <lib-lib/file.h>
+
+#include <lib-ui/curses.h>
+
 #include "mutt.h"
-#include "mutt_curses.h"
-#include "ascii.h"
 #include "handler.h"
 #include "state.h"
 #include "lib.h"
 
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
-#include "lib/debug.h"
-
 #define FLOWED_MAX 77
 
 static int get_quote_level (char *line)
@@ -45,7 +46,7 @@ static int get_quote_level (char *line)
 static void print_flowed_line (char *line, STATE * s, int ql) {
   int width;
   char *pos, *oldpos;
-  int len = str_len (line);
+  int len = m_strlen(line);
   int i;
 
   if (MaxLineLength > 0) {
@@ -67,7 +68,7 @@ static void print_flowed_line (char *line, STATE * s, int ql) {
       width = COLS;
   }
 
-  if (str_len (line) == 0) {
+  if (m_strlen(line) == 0) {
     if (!(s->flags & M_REPLYING) || option (OPTQUOTEEMPTY)) {
       if (s->prefix)
         state_puts(s->prefix,s);
@@ -87,35 +88,26 @@ static void print_flowed_line (char *line, STATE * s, int ql) {
      * the end of the string w/ pos */
     if (pos < line + len) {
       if (*pos == ' ') {
-        debug_print (4, ("f=f: found space directly at width\n"));
         *pos = '\0';
         ++pos;
       }
       else {
         char *save = pos;
-        debug_print (4, ("f=f: need to search for space\n"));
 
         while (pos >= oldpos && *pos != ' ') {
           --pos;
         }
         if (pos < oldpos) {
-          debug_print (4, ("f=f: no space found while searching "
-                           "to left; going right\n"));
           pos = save;
           while (pos < line + len && *pos && *pos != ' ') {
             ++pos;
           }
-          debug_print (4, ("f=f: found space at pos %d\n", pos-line));
-        } else {
-          debug_print (4, ("f=f: found space while searching to left\n"));
         }
         *pos = '\0';
         ++pos;
       }
     }
-    else {
-      debug_print (4, ("f=f: line completely fits on screen\n"));
-    }
+
     if (s->prefix)
       state_puts (s->prefix, s);
 
@@ -136,24 +128,25 @@ static void print_flowed_line (char *line, STATE * s, int ql) {
 int rfc3676_handler (BODY * a, STATE * s) {
   int bytes = a->length;
   char buf[LONG_STRING];
-  char *curline = str_dup ("");
+  char *curline = p_new(char, 1);
   char *t = NULL;
   unsigned int curline_len = 1,
                quotelevel = 0, newql = 0;
   int buf_off, buf_len;
   int delsp = 0, fixed = 0;
 
+  *curline='\0';
+
   /* respect DelSP of RfC3676 only with f=f parts */
   if ((t = (char*) mutt_get_parameter ("delsp", a->parameter))) {
-    delsp = str_len (t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
+    delsp = m_strlen(t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
     t = NULL;
   }
 
-  debug_print (2, ("f=f: DelSp: %s\n", delsp ? "yes" : "no"));
 
   while (bytes > 0 && fgets (buf, sizeof (buf), s->fpin)) {
 
-    buf_len = str_len (buf);
+    buf_len = m_strlen(buf);
     bytes -= buf_len;
 
     newql = get_quote_level (buf);
@@ -173,7 +166,7 @@ int rfc3676_handler (BODY * a, STATE * s) {
      * possibly a change in quoting level. But that's better than not
      * displaying it at all.
      */
-    if ((t = strrchr (buf, '\n')) || (t = strrchr (buf, '\r'))) {
+    if ((t = strrchr (buf, '\r')) || (t = strrchr (buf, '\n'))) {
       *t = '\0';
       buf_len = t - buf;
     }
@@ -208,7 +201,7 @@ int rfc3676_handler (BODY * a, STATE * s) {
       curline_len = 1;
     }
 
-    mem_realloc (&curline, curline_len + buf_len - buf_off);
+    p_realloc(&curline, curline_len + buf_len - buf_off);
     strcpy (curline + curline_len - 1, buf + buf_off);
     curline_len += buf_len - buf_off;
 
@@ -220,16 +213,11 @@ int rfc3676_handler (BODY * a, STATE * s) {
     }
 
   }
-  mem_free (&curline);
+  p_delete(&curline);
   return (0);
 }
 
 void rfc3676_space_stuff (HEADER* hdr) {
-#if DEBUG
-  int lc = 0;
-  size_t len = 0;
-  unsigned char c = '\0';
-#endif
   FILE* in = NULL, *out = NULL;
   char buf[LONG_STRING];
   char tmpfile[_POSIX_PATH_MAX];
@@ -237,7 +225,6 @@ void rfc3676_space_stuff (HEADER* hdr) {
   if (!hdr || !hdr->content || !hdr->content->filename)
     return;
 
-  debug_print (2, ("f=f: postprocess %s\n", hdr->content->filename));
   if ((in = safe_fopen (hdr->content->filename, "r")) == NULL)
     return;
   mutt_mktemp (tmpfile);
@@ -249,18 +236,6 @@ void rfc3676_space_stuff (HEADER* hdr) {
   while (fgets (buf, sizeof (buf), in)) {
     if (ascii_strncmp ("From ", buf, 4) == 0 || buf[0] == ' ') {
       fputc (' ', out);
-#if DEBUG
-      lc++;
-      len = str_len (buf);
-      if (len > 0) {
-        c = buf[len-1];
-        buf[len-1] = '\0';
-      }
-      debug_print (4, ("f=f: line %d needs space-stuffing: '%s'\n",
-                       lc, buf));
-      if (len > 0)
-        buf[len-1] = c;
-#endif
     }
     fputs (buf, out);
   }
@@ -268,5 +243,5 @@ void rfc3676_space_stuff (HEADER* hdr) {
   fclose (out);
   mutt_set_mtime (hdr->content->filename, tmpfile);
   unlink (hdr->content->filename);
-  str_replace (&hdr->content->filename, tmpfile);
+  m_strreplace(&hdr->content->filename, tmpfile);
 }