X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhmail.c;h=46b16fd21d58decf6ad9d2f8c38835362be31587;hp=6a77d5001ff8c4471925ceae67df17f8095a97a8;hb=fede6e42d81ce34fd5c1bbe7fb2757b281c2573a;hpb=ac0b9fcce4167e2959ebc5b8d6efb8511acec66d diff --git a/uip/mhmail.c b/uip/mhmail.c index 6a77d50..46b16fd 100644 --- a/uip/mhmail.c +++ b/uip/mhmail.c @@ -15,7 +15,7 @@ static struct swit switches[] = { #define BODYSW 0 - { "body text", 0 }, + { "bodytext text", 0 }, #define CCSW 1 { "cc addrs ...", 0 }, #define FROMSW 2 @@ -23,13 +23,9 @@ static struct swit switches[] = { #define SUBJSW 3 { "subject text", 0 }, #define VERSIONSW 4 - { "version", 0 }, + { "Version", 0 }, #define HELPSW 5 { "help", 0 }, -#define RESNDSW 6 - { "resent", -6 }, -#define QUEUESW 7 - { "queued", -6 }, { NULL, 0 } }; @@ -45,28 +41,23 @@ int main(int argc, char **argv) { pid_t child_id; - int status, i, iscc = 0, nvec; - int queued = 0, resent = 0, somebody; + int status, iscc = 0, nvec; char *cp, *tolist = NULL, *cclist = NULL, *subject = NULL; char *from = NULL, *body = NULL, **argp, **arguments; char *vec[5], buf[BUFSIZ]; FILE *out; char *tfile = NULL; -#ifdef LOCALE setlocale(LC_ALL, ""); -#endif invo_name = mhbasename(argv[0]); - /* foil search of user profile/context */ - if (context_foil(NULL) == -1) - done(1); - /* Without arguments, exit. */ if (argc == 1) { adios(NULL, "no interactive mail shell. Use inc/scan/show instead."); } + context_read(); + arguments = getarguments(invo_name, argc, argv, 0); argp = arguments; @@ -75,7 +66,8 @@ main(int argc, char **argv) switch (smatch(++cp, switches)) { case AMBIGSW: ambigsw(cp, switches); - done(1); + /* sysexits.h EX_USAGE */ + exit(1); case UNKWNSW: adios(NULL, "-%s unknown", cp); @@ -84,10 +76,10 @@ main(int argc, char **argv) "%s addrs... [switches]", invo_name); print_help(buf, switches, 0); - done(1); + exit(0); case VERSIONSW: print_version(invo_name); - done(1); + exit(0); case FROMSW: if (!(from = *argp++) || *from == '-') @@ -110,14 +102,6 @@ main(int argc, char **argv) adios(NULL, "missing argument to %s", argp[-2]); continue; - - case RESNDSW: - resent++; - continue; - - case QUEUESW: - queued++; - continue; } } if (iscc) @@ -139,28 +123,35 @@ main(int argc, char **argv) SIGNAL2(SIGINT, intrser); - fprintf(out, "%sTo: %s\n", resent ? "Resent-" : "", tolist); + fprintf(out, "To: %s\n", tolist); if (cclist) - fprintf(out, "%sCc: %s\n", resent ? "Resent-" : "", cclist); + fprintf(out, "Cc: %s\n", cclist); if (subject) - fprintf(out, "%sSubject: %s\n", resent ? "Resent-" : "", subject); + fprintf(out, "Subject: %s\n", subject); if (from) - fprintf(out, "%sFrom: %s\n", resent ? "Resent-" : "", from); - if (!resent) - fputs("\n", out); + fprintf(out, "From: %s\n", from); + fputs("\n", out); if (body) { fprintf(out, "%s", body); - if (*body && *(body + strlen(body) - 1) != '\n') + if (*body && body[strlen(body) - 1] != '\n') fputs("\n", out); } else { - for (somebody = 0; (i = fread(buf, sizeof(*buf), sizeof(buf), - stdin)) > 0; somebody++) - if (fwrite(buf, sizeof(*buf), i, out) != i) + int empty = 1; + + while (fgets(buf, sizeof buf, stdin)) { + if (buf[0]=='.' && buf[1]=='\n') { + /* A period alone on a line means EOF. */ + break; + } + empty = 0; + if (fputs(buf, out) == EOF) { adios(tmpfil, "error writing"); - if (!somebody) { + } + } + if (empty) { unlink(tmpfil); - done(1); + adios(NULL, "not sending message with empty body"); } } fclose(out); @@ -168,10 +159,6 @@ main(int argc, char **argv) nvec = 0; vec[nvec++] = "spost"; vec[nvec++] = tmpfil; - if (resent) - vec[nvec++] = "-dist"; - if (queued) - vec[nvec++] = "-queued"; vec[nvec] = NULL; if ((child_id = fork()) == NOTOK) { @@ -196,7 +183,8 @@ main(int argc, char **argv) if (in == -1 || out == -1) { fprintf(stderr, "Letter left at %s.\n", tmpfil); - done(status ? 1 : 0); + /* sysexits.h exit-status from spost */ + exit(status ? 1 : 0); } cpydata(in, out, tmpfil, "dead.letter"); close(in); @@ -204,7 +192,8 @@ main(int argc, char **argv) fprintf(stderr, "Letter saved in dead.letter\n"); } unlink(tmpfil); - done(status ? 1 : 0); + /* sysexits.h exit status from spost */ + exit(status ? 1 : 0); } return 0; /* dead code to satisfy the compiler */ @@ -215,6 +204,6 @@ static void intrser(int i) { unlink(tmpfil); - done(i != 0 ? 1 : 0); + exit(i != 0 ? 1 : 0); }