]> diplodocus.org Git - nmh/blobdiff - uip/mhparse.c
lock_file.c: close(2) file descriptor on failure, avoiding leak.
[nmh] / uip / mhparse.c
index 4d8e91e7ea6103b2acc8518b3bf09bbc3df245a3..1dc44e7a6cb42e5d874de805d79db3db8a7b7837 100644 (file)
 #include <h/utils.h>
 #include "mhmisc.h"
 #include <h/mhcachesbr.h>
 #include <h/utils.h>
 #include "mhmisc.h"
 #include <h/mhcachesbr.h>
-#include "../sbr/m_mktemp.h"
+#include "sbr/m_mktemp.h"
 #include "mhfree.h"
 #ifdef HAVE_ICONV
 # include <iconv.h>
 #endif /* HAVE_ICONV */
 #include "mhfree.h"
 #ifdef HAVE_ICONV
 # include <iconv.h>
 #endif /* HAVE_ICONV */
-#include "../sbr/base64.h"
+#include "sbr/base64.h"
 
 
 extern int debugsw;
 
 
 extern int debugsw;
@@ -46,8 +46,7 @@ bool suppress_extraneous_trailing_semicolon_warning;
 bool suppress_multiple_mime_version_warning = true;
 
 /* list of preferred type/subtype pairs, for -prefer */
 bool suppress_multiple_mime_version_warning = true;
 
 /* list of preferred type/subtype pairs, for -prefer */
-char *preferred_types[NPREFS];
-char *preferred_subtypes[NPREFS];
+mime_type_subtype mime_preference[NPREFS];
 int npreferred;
 
 
 int npreferred;
 
 
@@ -730,7 +729,7 @@ magic_skip:
      * Get any <Content-Id> given in buffer
      */
     if (magic && *cp == '<') {
      * Get any <Content-Id> given in buffer
      */
     if (magic && *cp == '<') {
-        mh_xfree(ct->c_id);
+        free(ct->c_id);
         ct->c_id = NULL;
        if (!(dp = strchr(ct->c_id = ++cp, '>'))) {
            inform("invalid ID in message %s", ct->c_file);
         ct->c_id = NULL;
        if (!(dp = strchr(ct->c_id = ++cp, '>'))) {
            inform("invalid ID in message %s", ct->c_file);
@@ -1109,7 +1108,7 @@ InitMultiPart (CT ct)
 
        bp = cte + strlen (cte) - 1;
        while (bp >= cte && isspace ((unsigned char) *bp)) *bp-- = '\0';
 
        bp = cte + strlen (cte) - 1;
        while (bp >= cte && isspace ((unsigned char) *bp)) *bp-- = '\0';
-       for (bp = cte; *bp && isblank ((unsigned char) *bp); ++bp) continue;
+       for (bp = cte; isblank((unsigned char)*bp); ++bp) continue;
 
        inform("\"%s/%s\" type in message %s must be encoded in\n"
            "7bit, 8bit, or binary, per RFC 2045 (6.4).  "
 
        inform("\"%s/%s\" type in message %s must be encoded in\n"
            "7bit, 8bit, or binary, per RFC 2045 (6.4).  "
@@ -1317,7 +1316,7 @@ reverse_parts (CT ct)
 }
 
 static void
 }
 
 static void
-move_preferred_part (CT ct, char *type, char *subtype)
+move_preferred_part(CT ct, mime_type_subtype *pref)
 {
     struct multipart *m = (struct multipart *) ct->c_ctparams;
     struct part *part, *prev, *head, *nhead, *ntail;
 {
     struct multipart *m = (struct multipart *) ct->c_ctparams;
     struct part *part, *prev, *head, *nhead, *ntail;
@@ -1341,8 +1340,9 @@ move_preferred_part (CT ct, char *type, char *subtype)
     part = head->mp_next;
     while (part != NULL) {
        ci = &part->mp_part->c_ctinfo;
     part = head->mp_next;
     while (part != NULL) {
        ci = &part->mp_part->c_ctinfo;
-       if (!strcasecmp(ci->ci_type, type) &&
-               (!subtype || !strcasecmp(ci->ci_subtype, subtype))) {
+       if (!strcasecmp(ci->ci_type, pref->type) &&
+            (!pref->subtype ||
+                !strcasecmp(ci->ci_subtype, pref->subtype))) {
            prev->mp_next = part->mp_next;
            part->mp_next = NULL;
            ntail->mp_next = part;
            prev->mp_next = part->mp_next;
            part->mp_next = NULL;
            ntail->mp_next = part;
@@ -1355,7 +1355,6 @@ move_preferred_part (CT ct, char *type, char *subtype)
     }
     ntail->mp_next = head->mp_next;
     m->mp_parts = nhead->mp_next;
     }
     ntail->mp_next = head->mp_next;
     m->mp_parts = nhead->mp_next;
-
 }
 
 /*
 }
 
 /*
@@ -1367,8 +1366,8 @@ static void
 prefer_parts(CT ct)
 {
     int i;
 prefer_parts(CT ct)
 {
     int i;
-    for (i = npreferred-1; i >= 0; i--)
-       move_preferred_part(ct, preferred_types[i], preferred_subtypes[i]);
+    for (i = 0; i < npreferred; i++)
+       move_preferred_part(ct, mime_preference + i);
 }
 
 
 }
 
 
@@ -2556,7 +2555,7 @@ openFTP (CT ct, char **file)
     }
 
     {
     }
 
     {
-       int child_id, i, vecp;
+       int child_id, vecp;
        char *vec[9];
 
        vecp = 0;
        char *vec[9];
 
        vecp = 0;
@@ -2573,8 +2572,7 @@ openFTP (CT ct, char **file)
 
        fflush (stdout);
 
 
        fflush (stdout);
 
-       for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
-           sleep (5);
+       child_id = fork();
        switch (child_id) {
            case NOTOK:
                adios ("fork", "unable to");
        switch (child_id) {
            case NOTOK:
                adios ("fork", "unable to");
@@ -2652,7 +2650,7 @@ InitMail (CT ct)
 static int
 openMail (CT ct, char **file)
 {
 static int
 openMail (CT ct, char **file)
 {
-    int        child_id, fd, i, vecp;
+    int child_id, fd, vecp;
     int len, buflen;
     char *bp, buffer[BUFSIZ], *vec[7];
     struct exbody *e = ct->c_ctexbody;
     int len, buflen;
     char *bp, buffer[BUFSIZ], *vec[7];
     struct exbody *e = ct->c_ctexbody;
@@ -2708,8 +2706,7 @@ openMail (CT ct, char **file)
     vec[vecp++] = e->eb_body;
     vec[vecp] = NULL;
 
     vec[vecp++] = e->eb_body;
     vec[vecp] = NULL;
 
-    for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
-       sleep (5);
+    child_id = fork();
     switch (child_id) {
        case NOTOK:
            advise ("fork", "unable to");
     switch (child_id) {
        case NOTOK:
            advise ("fork", "unable to");
@@ -2748,7 +2745,7 @@ openMail (CT ct, char **file)
 
     /* showproc is for mhshow and mhstore, though mhlist -debug
      * prints it, too. */
 
     /* showproc is for mhshow and mhstore, though mhlist -debug
      * prints it, too. */
-    mh_xfree(ct->c_showproc);
+    free(ct->c_showproc);
     ct->c_showproc = mh_xstrdup("true");
 
     fseek (ce->ce_fp, 0L, SEEK_SET);
     ct->c_showproc = mh_xstrdup("true");
 
     fseek (ce->ce_fp, 0L, SEEK_SET);
@@ -3399,7 +3396,7 @@ parse_header_attrs (const char *filename, const char *fieldname,
                     inform("missing language tag in message %s's %s: field\n"
                         "    (parameter %s)", filename, fieldname, nameptr);
                    free(nameptr);
                     inform("missing language tag in message %s's %s: field\n"
                         "    (parameter %s)", filename, fieldname, nameptr);
                    free(nameptr);
-                    mh_xfree(charset);
+                    free(charset);
                    return NOTOK;
                }
 
                    return NOTOK;
                }
 
@@ -3422,8 +3419,8 @@ parse_header_attrs (const char *filename, const char *fieldname,
                         inform("invalid encoded sequence in message %s's %s: field\n"
                             "    (parameter %s)", filename, fieldname, nameptr);
                        free(nameptr);
                         inform("invalid encoded sequence in message %s's %s: field\n"
                             "    (parameter %s)", filename, fieldname, nameptr);
                        free(nameptr);
-                        mh_xfree(charset);
-                        mh_xfree(lang);
+                        free(charset);
+                        free(lang);
                        return NOTOK;
                    }
                    vp += 2;
                        return NOTOK;
                    }
                    vp += 2;
@@ -3463,8 +3460,8 @@ bad_quote:
                         inform("invalid quoted-string in message %s's %s: field\n"
                             "    (parameter %s)", filename, fieldname, nameptr);
                        free(nameptr);
                         inform("invalid quoted-string in message %s's %s: field\n"
                             "    (parameter %s)", filename, fieldname, nameptr);
                        free(nameptr);
-                        mh_xfree(charset);
-                        mh_xfree(lang);
+                        free(charset);
+                        free(lang);
                        return NOTOK;
                    case '"':
                        break;
                        return NOTOK;
                    case '"':
                        break;
@@ -3571,9 +3568,9 @@ bad_quote:
             */
 
            if (index == 0 && encoded) {
             */
 
            if (index == 0 && encoded) {
-                mh_xfree(pp->charset);
+                free(pp->charset);
                pp->charset = charset;
                pp->charset = charset;
-                mh_xfree(pp->lang);
+                free(pp->lang);
                pp->lang = lang;
            }
        } else {
                pp->lang = lang;
            }
        } else {
@@ -3672,7 +3669,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external)
 
        if (strlen(params->pm_name) > CPERLIN) {
            inform("Parameter name \"%s\" is too long", params->pm_name);
 
        if (strlen(params->pm_name) > CPERLIN) {
            inform("Parameter name \"%s\" is too long", params->pm_name);
-            mh_xfree(paramout);
+            free(paramout);
            return NULL;
        }
 
            return NULL;
        }
 
@@ -3709,7 +3706,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external)
                                 numchars, valoff);
 
            if (i == 0) {
                                 numchars, valoff);
 
            if (i == 0) {
-                mh_xfree(paramout);
+                free(paramout);
                return NULL;
            }
 
                return NULL;
            }
 
@@ -3772,7 +3769,7 @@ output_params(size_t initialwidth, PM params, int *offsetout, int external)
                             strlen(params->pm_value + valoff), valoff);
 
        if (i == 0) {
                             strlen(params->pm_value + valoff), valoff);
 
        if (i == 0) {
-            mh_xfree(paramout);
+            free(paramout);
            return NULL;
        }
 
            return NULL;
        }