X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/19bf8698eeb0ab3d7694232af115fa3f007d5c7b..ec18722d02bd307bd09f30715dc8ba4e1b8a6716:/uip/mhmisc.c diff --git a/uip/mhmisc.c b/uip/mhmisc.c index f4b89168..53406c03 100644 --- a/uip/mhmisc.c +++ b/uip/mhmisc.c @@ -1,6 +1,4 @@ - -/* - * mhparse.c -- misc routines to process MIME messages +/* mhmisc.c -- misc routines to process MIME messages * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -11,6 +9,7 @@ #include #include #include +#include "../sbr/makedir.h" extern int debugsw; @@ -30,26 +29,54 @@ static char *errs = NULL; /* * prototypes */ -int part_ok (CT, int); +int part_ok (CT); +int part_exact(CT ct); int type_ok (CT, int); void content_error (char *, CT, char *, ...); void flush_errors (void); int -part_ok (CT ct, int sP) +part_ok (CT ct) { char **ap; int len; - if (npart == 0 || (ct->c_type == CT_MULTIPART && (sP || ct->c_subtype))) + /* a part is "ok", i.e., should be processed, if: + - there were no -part arguments + - this part is a multipart + */ + if (npart == 0 || ct->c_type == CT_MULTIPART) { return 1; + } + /* or if: + - this part is a an exact match for any -part option + - this part is a sub-part of any -part option + */ for (ap = parts; *ap; ap++) { len = strlen(*ap); if (!strncmp (*ap, ct->c_partno, len) && - (!ct->c_partno[len] || ct->c_partno[len] == '.' )) + (!ct->c_partno[len] || ct->c_partno[len] == '.' )) { + return 1; + } + } + + return 0; +} + +int +part_exact(CT ct) +{ + char **ap; + + if (!ct->c_partno) + return 0; + + for (ap = parts; *ap; ap++) { + if (!strcmp (*ap, ct->c_partno)) { return 1; + } } return 0; @@ -94,8 +121,7 @@ is_inline(CT ct) if (! ct->c_dispo_type || strcasecmp(ct->c_dispo_type, "inline") == 0) return 1; - else - return 0; + return 0; } int @@ -118,13 +144,13 @@ losing_directory: } ep = concat ("Create directory \"", file, "\"? ", NULL); - answer = getanswer (ep); + answer = read_yes_or_no_if_tty (ep); free (ep); if (!answer) goto losing_directory; if (!makedir (file)) { - advise (NULL, "unable to create directory %s", file); + inform("unable to create directory %s", file); goto losing_directory; } } @@ -190,7 +216,7 @@ content_error (char *what, CT ct, char *fmt, ...) i = strlen (invo_name) + 2; /* Now add content type and subtype */ - snprintf (bp, buflen, "\n%*.*s(content %s/%s", i, i, "", + snprintf (bp, buflen, "\n%*s(content %s/%s", i, "", ci->ci_type, ci->ci_subtype); len = strlen (bp); bp += len; @@ -223,7 +249,7 @@ content_error (char *what, CT ct, char *fmt, ...) errs = add (buffer, errs); } else { - advise (NULL, "%s", buffer); + inform("%s", buffer); } } @@ -233,7 +259,7 @@ flush_errors (void) { if (errs) { fflush (stdout); - fprintf (stderr, "%s", errs); + fputs(errs, stderr); free (errs); errs = NULL; }