X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/152af2f5d075ce062e9a578738ad5c32735dd682..986abcee996d486db0b9c753974f3cb0eac2e9b2:/uip/mhfixmsg.c diff --git a/uip/mhfixmsg.c b/uip/mhfixmsg.c index fc1b0a6d..7a298e0b 100644 --- a/uip/mhfixmsg.c +++ b/uip/mhfixmsg.c @@ -9,11 +9,13 @@ #include #include #include +#include "h/done.h" #include #include -#include "../sbr/m_maildir.h" -#include "../sbr/m_mktemp.h" -#include "../sbr/mime_type.h" +#include "sbr/m_maildir.h" +#include "sbr/m_mktemp.h" +#include "sbr/mime_type.h" +#include "mhmisc.h" #include "mhfree.h" #include "mhoutsbr.h" #include "mhshowsbr.h" @@ -61,16 +63,6 @@ int debugsw; /* Needed by mhparse.c. */ #define quitser pipeser -/* mhparse.c */ -extern int skip_mp_cte_check; /* flag to InitMultiPart */ -extern int suppress_bogus_mp_content_warning; /* flag to InitMultiPart */ -extern int bogus_mp_content; /* flag from InitMultiPart */ -/* flags to/from parse_header_attrs */ -extern int suppress_extraneous_trailing_semicolon_warning; - -/* mhmisc.c */ -void flush_errors (void); - /* * static prototypes */ @@ -87,8 +79,8 @@ typedef struct fix_transformations { char *textcharset; } fix_transformations; -int mhfixmsgsbr (CT *, char *, const fix_transformations *, FILE **, char *, - FILE **); +static int mhfixmsgsbr (CT *, char *, const fix_transformations *, + FILE **, char *, FILE **); static int fix_boundary (CT *, int *); static int copy_input_to_output (const char *, FILE *, const char *, FILE *); static int get_multipart_boundary (CT, char **); @@ -152,7 +144,7 @@ main (int argc, char **argv) { fx.lf_line_endings = 0; fx.textcharset = NULL; - if (nmh_init(argv[0], 2)) { return 1; } + if (nmh_init(argv[0], true, false)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -167,7 +159,7 @@ main (int argc, char **argv) { ambigsw (cp, switches); done (1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + die("-%s unknown", cp); case HELPSW: snprintf (buf, sizeof buf, "%s [+folder] [msgs] [switches]", @@ -180,7 +172,7 @@ main (int argc, char **argv) { case DECODETEXTSW: if (! (cp = *argp++) || *cp == '-') { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } if (! strcasecmp (cp, "8bit")) { fx.decodetext = CE_8BIT; @@ -189,7 +181,7 @@ main (int argc, char **argv) { } else if (! strcasecmp (cp, "binary")) { fx.decodetext = CE_BINARY; } else { - adios (NULL, "invalid argument to %s", argp[-2]); + die("invalid argument to %s", argp[-2]); } continue; case NDECODETEXTSW: @@ -197,7 +189,7 @@ main (int argc, char **argv) { continue; case DECODETYPESW: if (! (cp = *argp++) || *cp == '-') { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } fx.decodetypes = cp; continue; @@ -209,7 +201,7 @@ main (int argc, char **argv) { continue; case TEXTCHARSETSW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } fx.textcharset = cp; continue; @@ -230,13 +222,13 @@ main (int argc, char **argv) { continue; case FIXTYPESW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } if (! strncasecmp (cp, "multipart/", 10) || ! strncasecmp (cp, "message/", 8)) - adios (NULL, "-fixtype %s not allowed", cp); + die("-fixtype %s not allowed", cp); if (! strchr (cp, '/')) - adios (NULL, "-fixtype requires type/subtype"); + die("-fixtype requires type/subtype"); if (fx.fixtypes == NULL) { fx.fixtypes = svector_create (10); } svector_push_back (fx.fixtypes, cp); continue; @@ -254,19 +246,19 @@ main (int argc, char **argv) { continue; case FILESW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } file = *cp == '-' ? mh_xstrdup (cp) : path (cp, TFILE); continue; case OUTFILESW: if (! (cp = *argp++) || (*cp == '-' && cp[1])) { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } outfile = *cp == '-' ? mh_xstrdup (cp) : path (cp, TFILE); continue; case RPROCSW: if (!(rmmproc = *argp++) || *rmmproc == '-') { - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); } continue; case NRPRCSW: @@ -288,7 +280,7 @@ main (int argc, char **argv) { } if (*cp == '+' || *cp == '@') { if (folder) - adios (NULL, "only one folder at a time!"); + die("only one folder at a time!"); folder = pluspath (cp); } else { if (*cp == '/') { @@ -307,19 +299,19 @@ main (int argc, char **argv) { * Read the standard profile setup */ if ((fp = fopen (cp = etcpath ("mhn.defaults"), "r"))) { - readconfig ((struct node **) 0, fp, cp, 0); + readconfig(NULL, fp, cp, 0); fclose (fp); } - suppress_bogus_mp_content_warning = skip_mp_cte_check = 1; - suppress_extraneous_trailing_semicolon_warning = 1; + suppress_bogus_mp_content_warning = skip_mp_cte_check = true; + suppress_extraneous_trailing_semicolon_warning = true; if (! context_find ("path")) { free (path ("./", TFOLDER)); } if (file && msgs.size) { - adios (NULL, "cannot specify msg and file at same time!"); + die("cannot specify msg and file at same time!"); } if (outfile) { @@ -349,7 +341,7 @@ main (int argc, char **argv) { using_stdin = 1; if ((cp = m_mktemp2 (NULL, invo_name, &fd, NULL)) == NULL) { - adios (NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } else { free (file); @@ -359,7 +351,7 @@ main (int argc, char **argv) { if (close (fd)) { (void) m_unlink (file); - adios (NULL, "failed to write temporary file"); + die("failed to write temporary file"); } } @@ -414,12 +406,12 @@ main (int argc, char **argv) { /* read folder and create message structure */ if (! (mp = folder_read (folder, 1))) { - adios (NULL, "unable to read folder %s", folder); + die("unable to read folder %s", folder); } /* check for empty folder */ if (mp->nummsg == 0) { - adios (NULL, "no messages in %s", folder); + die("no messages in %s", folder); } /* parse all the message ranges/sequences and set SELECTED */ @@ -504,7 +496,7 @@ main (int argc, char **argv) { status = 1; } - mh_xfree(maildir); + free(maildir); free (cts); if (fx.fixtypes != NULL) { svector_free (fx.fixtypes); } @@ -523,7 +515,7 @@ main (int argc, char **argv) { /* * Apply transformations to one message. */ -int +static int mhfixmsgsbr (CT *ctp, char *maildir, const fix_transformations *fx, FILE **infp, char *outfile, FILE **outfp) { /* Store input filename in case one of the transformations, i.e., @@ -550,12 +542,12 @@ mhfixmsgsbr (CT *ctp, char *maildir, const fix_transformations *fx, /* outfp will be closed by the caller */ if ((tempfile = m_mktemp2 (NULL, invo_name, NULL, outfp)) == NULL) { - adios (NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } outfile = mh_xstrdup (tempfile); } else { - adios (NULL, "missing both input and output filenames\n"); + die("missing both input and output filenames\n"); } } /* else *outfp was defined by caller */ @@ -875,7 +867,7 @@ replace_boundary (CT ct, char *file, char *boundary) { fprintf (fpout, "%s:%s%s\n", np, new_ctline, FENDNULL(new_params)); free(new_ctline); - mh_xfree(new_params); + free(new_params); } free (vp); @@ -1123,7 +1115,7 @@ fix_composite_cte (CT ct, int *message_mods) { for (hf = ct->c_first_hf; hf; hf = hf->next) { char *name = hf->name; - for (; *name && isspace ((unsigned char) *name); ++name) { + for (; isspace((unsigned char)*name); ++name) { continue; } @@ -1614,7 +1606,7 @@ decode_part (CT ct) { char *tempfile; if ((tempfile = m_mktemp2 (NULL, invo_name, NULL, &file)) == NULL) { - adios (NULL, "unable to create temporary file in %s", get_temp_dir()); + die("unable to create temporary file in %s", get_temp_dir()); } tmp_decoded = mh_xstrdup (tempfile); /* The following call will load ct->c_cefile.ce_file with the tmp @@ -1751,8 +1743,7 @@ build_multipart_alt (CT first_alt, CT new_part, int type, int subtype) { boundary_in_content (&new_part->c_cefile.ce_fp, new_part->c_cefile.ce_file, boundary)) == NOTOK) { - free_content (ct); - return NULL; + goto return_null; } } @@ -1763,8 +1754,7 @@ build_multipart_alt (CT first_alt, CT new_part, int type, int subtype) { boundary_in_content (&new_part->c_fp, new_part->c_file, boundary)) == NOTOK) { - free_content (ct); - return NULL; + goto return_null; } } @@ -1784,8 +1774,7 @@ build_multipart_alt (CT first_alt, CT new_part, int type, int subtype) { if (found_boundary) { inform("giving up trying to find a unique boundary"); - free_content (ct); - return NULL; + goto return_null; } } @@ -1830,6 +1819,11 @@ build_multipart_alt (CT first_alt, CT new_part, int type, int subtype) { free (boundary); return ct; + +return_null: + free_content(ct); + free(boundary); + return NULL; } @@ -2260,7 +2254,7 @@ strip_crs (CT ct, int *message_mods) { char *tempfile = m_mktemp2 (NULL, invo_name, &fd, NULL); if (tempfile == NULL) { - adios (NULL, "unable to create temporary file in %s", + die("unable to create temporary file in %s", get_temp_dir()); } stripped_content_file = mh_xstrdup (tempfile); @@ -2299,13 +2293,14 @@ strip_crs (CT ct, int *message_mods) { inform("unable to write temporary file %s, continuing...", stripped_content_file); (void) m_unlink (stripped_content_file); + free(stripped_content_file); status = NOTOK; } else { /* Replace the decoded file with the converted one. */ if (ct->c_cefile.ce_file && ct->c_cefile.ce_unlink) (void) m_unlink (ct->c_cefile.ce_file); - mh_xfree(ct->c_cefile.ce_file); + free(ct->c_cefile.ce_file); ct->c_cefile.ce_file = stripped_content_file; ct->c_cefile.ce_unlink = 1;