X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fmhbuild.c;h=fde4a1d784fd1d3cd3a6c017d828c4c741480be6;hb=379b1bf4d085439639e7c535aac08345809dd6aa;hp=5cccd2a78fd63b59392dde2b0f951fe97efdeeb7;hpb=01a3480928da485b4d6109d36d751dfa71799d58;p=mmh diff --git a/uip/mhbuild.c b/uip/mhbuild.c index 5cccd2a..fde4a1d 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -29,31 +29,15 @@ #include static struct swit switches[] = { -#define HEADSW 0 - { "headers", 0 }, -#define NHEADSW 1 - { "noheaders", 0 }, -#define LISTSW 2 - { "list", 0 }, -#define NLISTSW 3 - { "nolist", 0 }, -#define RFC934SW 4 - { "rfc934mode", 0 }, -#define NRFC934SW 5 - { "norfc934mode", 0 }, -#define VERBSW 6 +#define VERBSW 0 { "verbose", 0 }, -#define NVERBSW 7 - { "noverbose", 0 }, -#define CONTENTIDSW 8 - { "contentid", 0 }, -#define NCONTENTIDSW 9 - { "nocontentid", 0 }, -#define VERSIONSW 10 - { "version", 0 }, -#define HELPSW 11 +#define NVERBSW 1 + { "noverbose", 2 }, +#define VERSIONSW 2 + { "Version", 0 }, +#define HELPSW 3 { "help", 0 }, -#define DEBUGSW 12 +#define DEBUGSW 4 { "debug", -5 }, { NULL, 0 } }; @@ -99,10 +83,6 @@ static CT build_mime(char *); int debugsw = 0; int verbosw = 0; -int listsw = 0; -int rfc934sw = 0; -int contentidsw = 1; - /* ** Temporary files */ @@ -118,9 +98,6 @@ static void unlink_done(int) NORETURN; int output_message(CT, char *); int output_message_fp(CT, FILE *, char*); -/* mhlistsbr.c */ -int list_all_messages(CT *, int, int, int); - /* mhmisc.c */ void set_endian(void); @@ -131,19 +108,16 @@ void free_content(CT); int main(int argc, char **argv) { - int headsw = 1; char *cp, buf[BUFSIZ]; char buffer[BUFSIZ], *compfile = NULL; char **argp, **arguments; - CT ct, cts[2]; + CT ct; FILE *fp = NULL; FILE *fp_out = NULL; done = unlink_done; -#ifdef LOCALE setlocale(LC_ALL, ""); -#endif invo_name = mhbasename(argv[0]); /* read user profile/context */ @@ -158,7 +132,6 @@ main(int argc, char **argv) adios(NULL, "cannot specify both standard input and a file"); else compfile = cp; - listsw = 0; /* turn off -list if using std in/out */ verbosw = 0; /* turn off -verbose listings */ break; } @@ -178,34 +151,6 @@ main(int argc, char **argv) print_version(invo_name); done(1); - case HEADSW: - headsw++; - continue; - case NHEADSW: - headsw = 0; - continue; - - case LISTSW: - listsw++; - continue; - case NLISTSW: - listsw = 0; - continue; - - case RFC934SW: - rfc934sw++; - continue; - case NRFC934SW: - rfc934sw = 0; - continue; - - case CONTENTIDSW: - contentidsw = 1; - continue; - case NCONTENTIDSW: - contentidsw = 0; - continue; - case VERBSW: verbosw++; continue; @@ -225,9 +170,6 @@ main(int argc, char **argv) set_endian(); - if ((cp = getenv("MM_NOASK")) && strcmp(cp, "1")==0) - listsw = 0; - /* ** Check if we've specified an additional profile */ @@ -278,8 +220,6 @@ main(int argc, char **argv) /* build the content structures for MIME message */ ct = build_mime(infile); - cts[0] = ct; - cts[1] = NULL; /* output MIME message to this temporary file */ strncpy(outfile, m_mktemp(invo_name, NULL, &fp_out), @@ -313,8 +253,6 @@ main(int argc, char **argv) /* build the content structures for MIME message */ ct = build_mime(compfile); - cts[0] = ct; - cts[1] = NULL; /* output MIME message to this temporary file */ strncpy(outfile, m_mktemp2(compfile, invo_name, NULL, &fp_out), @@ -325,21 +263,15 @@ main(int argc, char **argv) output_message_fp(ct, fp_out, outfile); fclose(fp_out); - /* - ** List the message info - */ - if (listsw) - list_all_messages(cts, headsw, verbosw, debugsw); - /* Rename composition draft */ - snprintf(buffer, sizeof(buffer), "%s.orig", m_backup(compfile)); + snprintf(buffer, sizeof(buffer), "%s.orig", compfile); if (rename(compfile, buffer) == NOTOK) { - adios(compfile, "unable to rename comp draft %s to", buffer); + adios(buffer, "unable to rename draft %s to", compfile); } /* Rename output file to take its place */ if (rename(outfile, compfile) == NOTOK) { - advise(outfile, "unable to rename output %s to", compfile); + advise(compfile, "unable to rename output %s to", outfile); rename(buffer, compfile); done(1); } @@ -644,7 +576,6 @@ user_content(FILE *in, char *file, char *buf, CT *ctp) char buffer[BUFSIZ]; struct multipart *m; struct part **pp; - struct stat st; struct str2init *s2i; CI ci; CT ct; @@ -772,8 +703,6 @@ rock_and_roll: } } - if (listsw) - ct->c_end = ftell(out); fclose(out); /* parse content type */ @@ -855,8 +784,8 @@ call_init: adios(NULL, "sorry, \"#%s/%s\" isn't supported", ci->ci_type, ci->ci_subtype); } use_forw: - adios(NULL, "use \"#forw [+folder] [msgs]\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); - /* NOTREACHED */ + admonish(NULL, "use \"#forw [+folder] [msgs]\" instead of \"#%s/%s\"", ci->ci_type, ci->ci_subtype); + /* FALL */ default: if ((ct->c_ctinitfnx = s2i->si_init)) @@ -880,8 +809,6 @@ use_forw: ce->ce_file = ci->ci_magic; if (access(ce->ce_file, R_OK) == NOTOK) adios("reading", "unable to access %s for", ce->ce_file); - if (listsw && stat(ce->ce_file, &st) != NOTOK) - ct->c_end = (long) st.st_size; ci->ci_magic = NULL; } return OK; @@ -996,9 +923,6 @@ use_forw: "%s/%d", mp->foldpath, msgnum); pe->ce_file = getcpy(buffer); - if (listsw && stat(pe->ce_file, &st) - != NOTOK) - p->c_end = (long) st.st_size; if ((part = (struct part *) calloc(1, sizeof(*part))) == NULL) adios(NULL, "out of memory"); @@ -1018,8 +942,6 @@ use_forw: snprintf(buffer, sizeof(buffer), "%s/%d", mp->foldpath, msgnum); ce->ce_file = getcpy(buffer); - if (listsw && stat(ce->ce_file, &st) != NOTOK) - ct->c_end = (long) st.st_size; } folder_free(mp); /* free folder/message structure */ @@ -1156,41 +1078,6 @@ compose_content(CT ct) if (compose_content(p) == NOTOK) return NOTOK; } - - /* - ** If the -rfc934mode switch is given, then check all - ** the subparts of a multipart/digest. If they are all - ** message/rfc822, then mark this content and all - ** subparts with the rfc934 compatibility mode flag. - */ - if (rfc934sw && ct->c_subtype == MULTI_DIGEST) { - int is934 = 1; - - for (part = m->mp_parts; part; part = part->mp_next) { - CT p = part->mp_part; - - if (p->c_subtype != MESSAGE_RFC822) { - is934 = 0; - break; - } - } - ct->c_rfc934 = is934; - for (part = m->mp_parts; part; part = part->mp_next) { - CT p = part->mp_part; - - if ((p->c_rfc934 = is934)) - p->c_end++; - } - } - - if (listsw) { - ct->c_end = (partnum = strlen(prefix) + 2) + 2; - if (ct->c_rfc934) - ct->c_end += 1; - - for (part = m->mp_parts; part; part = part->mp_next) - ct->c_end += part->mp_part->c_end + partnum; - } } break; @@ -1328,14 +1215,6 @@ raw: break; } } - - /* Check size of file */ - if (listsw && ct->c_end == 0L) { - struct stat st; - - if (stat(ce->ce_file, &st) != NOTOK) - ct->c_end = (long) st.st_size; - } break; } @@ -1360,10 +1239,10 @@ static int scan_content(CT ct) { int len; - int check8bit = 0, contains8bit = 0; /* check if contains 8bit data */ - int checklinelen = 0, linelen = 0; /* check for long lines */ - int checkboundary = 0, boundaryclash = 0; /* check if clashes with multipart boundary */ - int checklinespace = 0, linespace = 0; /* check if any line ends with space */ + int check8bit = 0, contains8bit = 0; + int checklinelen = 0, linelen = 0; + int checkboundary = 0, boundaryclash = 0; + int checklinespace = 0, linespace = 0; /* trailing whitespace */ unsigned char *cp = NULL, buffer[BUFSIZ]; struct text *t = NULL; FILE *in = NULL; @@ -1418,13 +1297,6 @@ scan_content(CT ct) } break; - case CT_APPLICATION: - check8bit = 1; - checklinelen = 1; - checklinespace = 1; - checkboundary = 1; - break; - case CT_MESSAGE: check8bit = 0; checklinelen = 0; @@ -1432,13 +1304,10 @@ scan_content(CT ct) checkboundary = 1; break; + case CT_APPLICATION: case CT_AUDIO: case CT_IMAGE: case CT_VIDEO: - /* - ** Don't check anything for these types, - ** since we are forcing use of base64. - */ check8bit = 0; checklinelen = 0; checklinespace = 0; @@ -1455,9 +1324,6 @@ scan_content(CT ct) len = strlen(prefix); while (fgets(buffer, sizeof(buffer) - 1, in)) { - /* - ** Check for 8bit data. - */ if (check8bit) { for (cp = buffer; *cp; cp++) { if (!isascii(*cp)) { @@ -1468,17 +1334,11 @@ scan_content(CT ct) } } - /* - ** Check line length. - */ if (checklinelen && (strlen(buffer) > CPERLIN + 1)) { linelen = 1; checklinelen = 0; /* no need to keep checking */ } - /* - ** Check if line ends with a space. - */ if (checklinespace && (cp = buffer + strlen(buffer) - 2) > buffer && isspace(*cp)) { @@ -1547,24 +1407,19 @@ scan_content(CT ct) ct->c_encoding = CE_7BIT; break; - case CT_APPLICATION: - /* For application type, use base64, except when postscript */ - if (contains8bit || linelen || linespace) - ct->c_encoding = (ct->c_subtype == - APPLICATION_POSTSCRIPT) ? - CE_QUOTED : CE_BASE64; - else - ct->c_encoding = CE_7BIT; - break; - case CT_MESSAGE: ct->c_encoding = CE_7BIT; break; + case CT_APPLICATION: case CT_AUDIO: case CT_IMAGE: case CT_VIDEO: - /* For audio, image, and video contents, just use base64 */ + /* + ** Forcing use of base64, because these types likely + ** contain binary data and NUL bytes. Don't care about + ** files that would be clean. + */ ct->c_encoding = CE_BASE64; break; } @@ -1606,16 +1461,6 @@ build_headers(CT ct) } /* - ** Skip the output of Content-Type, parameters, content - ** description and disposition, and Content-ID if the - ** content is of type "message" and the rfc934 compatibility - ** flag is set (which means we are inside multipart/digest - ** and the switch -rfc934mode was given). - */ - if (ct->c_type == CT_MESSAGE && ct->c_rfc934) - goto skip_headers; - - /* ** output the content type and subtype */ np = getcpy(TYPE_FIELD); @@ -1665,9 +1510,9 @@ build_headers(CT ct) add_header(ct, np, vp); /* - ** output the Content-ID, unless disabled by -nocontentid + ** output the Content-ID */ - if (contentidsw && ct->c_id) { + if (ct->c_id) { np = getcpy(ID_FIELD); vp = concat(" ", ct->c_id, NULL); add_header(ct, np, vp); @@ -1691,7 +1536,6 @@ build_headers(CT ct) add_header(ct, np, vp); } -skip_headers: /* ** output the Content-Transfer-Encoding */