]> diplodocus.org Git - nmh/commitdiff
Switch over get_ctinfo() to determine the filename based on the filename if
authorKen Hornstein <kenh@pobox.com>
Mon, 3 Mar 2014 02:04:55 +0000 (21:04 -0500)
committerKen Hornstein <kenh@pobox.com>
Mon, 3 Mar 2014 02:04:55 +0000 (21:04 -0500)
one was not provided.  Remove some unneeded functions as part of this work.

test/mhbuild/test-ext-params
uip/mhparse.c

index c962cf43fb8d74594475ff206b27fa3139abc4b0..96cad2e93435006a5b70dd05520da36258c032e3 100755 (executable)
@@ -142,4 +142,43 @@ EOF
 
 check "$draft" "$expected"
 
+#
+# Alternate version; specify a disposion, but not an explicit filename
+#
+
+cat > "$draft" <<EOF
+To: Mr Test <mrtest@example.com>
+cc:
+Fcc: +outbox
+------
+This is a test message
+#image/jpeg {attachment} $MH_TEST_DIR/tïny.jpg
+EOF
+
+run_prog mhbuild "$draft"
+
+cat > "$expected" <<EOF
+To: Mr Test <mrtest@example.com>
+cc:
+Fcc: +outbox
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
+
+------- =_aaaaaaaaaa0
+Content-Type: text/plain; charset="us-ascii"
+
+This is a test message
+
+------- =_aaaaaaaaaa0
+Content-Type: image/jpeg
+Content-Disposition: attachment; filename*=UTF-8''t%C3%AFny.jpg
+Content-Transfer-Encoding: base64
+
+/9g=
+
+------- =_aaaaaaaaaa0--
+EOF
+
+check "$draft" "$expected"
+
 exit ${failed:-0}
index b659ce8d9f1bdded31d6c1339be3540814b62942..dbe469c54724932d7e6d6e0a9ed3198e45427ff6 100644 (file)
@@ -595,88 +595,6 @@ add_header (CT ct, char *name, char *value)
 }
 
 
-/* Make sure that buf contains at least one appearance of name,
-   followed by =.  If not, insert both name and value, just after
-   first semicolon, if any.  Note that name should not contain a
-   trailing =. And quotes will be added around the value.  Typical
-   usage:  make sure that a Content-Disposition header contains
-   filename="foo".  If it doesn't and value does, use value from
-   that. */
-static char *
-incl_name_value (char *buf, char *name, char *value) {
-    char *newbuf = buf;
-
-    /* Assume that name is non-null. */
-    if (buf && value) {
-       char *name_plus_equal = concat (name, "=", NULL);
-
-       if (! strstr (buf, name_plus_equal)) {
-           char *insertion;
-           char *cp, *prefix, *suffix;
-
-           /* Trim trailing space, esp. newline. */
-           for (cp = &buf[strlen (buf) - 1];
-                cp >= buf && isspace ((unsigned char) *cp);
-                --cp) {
-               *cp = '\0';
-           }
-
-           insertion = concat ("; ", name, "=", "\"", value, "\"", NULL);
-
-           /* Insert at first semicolon, if any.  If none, append to
-              end. */
-           prefix = add (buf, NULL);
-           if ((cp = strchr (prefix, ';'))) {
-               suffix = concat (cp, NULL);
-               *cp = '\0';
-               newbuf = concat (prefix, insertion, suffix, "\n", NULL);
-               free (suffix);
-           } else {
-               /* Append to end. */
-               newbuf = concat (buf, insertion, "\n", NULL);
-           }
-
-           free (prefix);
-           free (insertion);
-           free (buf);
-       }
-
-       free (name_plus_equal);
-    }
-
-    return newbuf;
-}
-
-/* Extract just name_suffix="foo", if any, from value. If there isn't
-   one, return the entire value.  Note that, for example, a name_suffix
-   of name will match filename="foo", and return foo. */
-static char *
-extract_name_value (char *name_suffix, char *value) {
-    char *extracted_name_value = value;
-    char *name_suffix_plus_quote = concat (name_suffix, "=\"", NULL);
-    char *name_suffix_equals = strstr (value, name_suffix_plus_quote);
-    char *cp;
-
-    free (name_suffix_plus_quote);
-    if (name_suffix_equals) {
-       char *name_suffix_begin;
-
-       /* Find first \". */
-       for (cp = name_suffix_equals; *cp != '"'; ++cp) /* empty */;
-       name_suffix_begin = ++cp;
-       /* Find second \". */
-       for (; *cp != '"'; ++cp) /* empty */;
-
-       extracted_name_value = mh_xmalloc (cp - name_suffix_begin + 1);
-       memcpy (extracted_name_value,
-               name_suffix_begin,
-               cp - name_suffix_begin);
-       extracted_name_value[cp - name_suffix_begin] = '\0';
-    }
-
-    return extracted_name_value;
-}
-
 /*
  * Parse Content-Type line and (if `magic' is non-zero) mhbuild composition
  * directives.  Fills in the information of the CTinfo structure.
@@ -915,14 +833,11 @@ magic_skip:
                have a *filename=, extract it from the magic contents.
                The r1bindex call skips any leading directory
                components. */
-            if (ct->c_dispo)
-                ct->c_dispo =
-                    incl_name_value (ct->c_dispo,
-                                     "filename",
-                                     r1bindex (extract_name_value ("name",
-                                                                   ci->
-                                                                   ci_magic),
-                                               '/'));
+            if (ct->c_dispo_type &&
+               !get_param(ct->c_dispo_first, "filename", '_', 1)) {
+               add_param(&ct->c_dispo_first, &ct->c_dispo_last, "filename",
+                         r1bindex(ci->ci_magic, '/'));
+           }
         }
        else
            advise (NULL,