Rocco Rutte:
[apps/madmutt.git] / url.c
diff --git a/url.c b/url.c
index 44463cb..2597646 100644 (file)
--- a/url.c
+++ b/url.c
@@ -1,19 +1,10 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 2000 Thomas Roessler <roessler@does-not-exist.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.
  */
 
 /*
 #endif
 
 #include "mutt.h"
+#include "ascii.h"
 #include "mapping.h"
 #include "url.h"
 
 #include "mime.h"
 
+#include "lib/mem.h"
+
 #include <ctype.h>
 
 static struct mapping_t UrlMap[] = {
@@ -178,8 +172,8 @@ int url_ciss_tostring (ciss_url_t * ciss, char *dest, size_t len, int flags)
   snprintf (dest, len, "%s:", mutt_getnamebyvalue (ciss->scheme, UrlMap));
 
   if (ciss->host) {
-    safe_strcat (dest, len, "//");
-    len -= (l = strlen (dest));
+    str_cat (dest, len, "//");
+    len -= (l = str_len (dest));
     dest += l;
 
     if (ciss->user) {
@@ -188,7 +182,7 @@ int url_ciss_tostring (ciss_url_t * ciss, char *dest, size_t len, int flags)
       else
         snprintf (dest, len, "%s@", ciss->user);
 
-      len -= (l = strlen (dest));
+      len -= (l = str_len (dest));
       dest += l;
     }
 
@@ -199,7 +193,7 @@ int url_ciss_tostring (ciss_url_t * ciss, char *dest, size_t len, int flags)
   }
 
   if (ciss->path)
-    safe_strcat (dest, len, ciss->path);
+    str_cat (dest, len, ciss->path);
 
   return 0;
 }
@@ -219,7 +213,7 @@ int url_parse_mailto (ENVELOPE * e, char **body, const char *src)
   if (!(t = strchr (src, ':')))
     return -1;
 
-  if ((tmp = safe_strdup (t + 1)) == NULL)
+  if ((tmp = str_dup (t + 1)) == NULL)
     return -1;
 
   if ((headers = strchr (tmp, '?')))
@@ -241,19 +235,25 @@ int url_parse_mailto (ENVELOPE * e, char **body, const char *src)
 
     if (!ascii_strcasecmp (tag, "body")) {
       if (body)
-        mutt_str_replace (body, value);
+        str_replace (body, value);
     }
     else {
-      taglen = strlen (tag);
+#define SAFEPFX (option (OPTSTRICTMAILTO) ? "" : "X-Mailto-")
+      taglen = str_len (tag) + str_len (SAFEPFX);
       /* mutt_parse_rfc822_line makes some assumptions */
-      snprintf (scratch, sizeof (scratch), "%s: %s", tag, value);
+      snprintf (scratch, sizeof (scratch), "%s%s: %s", SAFEPFX, tag, value);
+#undef SAVEPFX
       scratch[taglen] = '\0';
       value = &scratch[taglen + 1];
       SKIPWS (value);
       mutt_parse_rfc822_line (e, NULL, scratch, value, 1, 0, 0, &last);
+      /* if $strict_mailto is set, force editing headers to let
+       * users have a look at what we got */
+      if (!option (OPTSTRICTMAILTO))
+        set_option (OPTEDITHDRS);
     }
   }
 
-  FREE (&tmp);
+  mem_free (&tmp);
   return 0;
 }