From: markus schnalke Date: Sat, 5 May 2012 09:38:23 +0000 (+0200) Subject: mhmail: For mailx(1) compat: A period alone on a line means EOF. X-Git-Tag: mmh-thesis-end~45 X-Git-Url: http://git.marmaro.de/?p=mmh;a=commitdiff_plain;h=ec1868939da034be930a7c86f967036c282680ff;ds=sidebyside mhmail: For mailx(1) compat: A period alone on a line means EOF. Also renamed the -body switch to -bodytext because its argument is the body text and not a file containing the body text. The rename should clarify this. After all, typing `-body' results in the same as typing `-bodytext' or only `-b'. --- diff --git a/man/mhmail.man1 b/man/mhmail.man1 index 0210c73..d2dcaae 100644 --- a/man/mhmail.man1 +++ b/man/mhmail.man1 @@ -9,14 +9,14 @@ mhmail \- send mail .na .B mhmail .IR addrs ... -.RB [ \-body -.IR text ] .RB [ \-cc .IR addrs ...] .RB [ \-from .IR addr ] .RB [ \-subject .IR subject ] +.RB [ \-bodytext +.IR text ] .RB [ \-Version ] .RB [ \-help ] .ad @@ -69,16 +69,23 @@ switch can be used to specify the By default, .B mhmail will read the message to be sent from the -standard input. You can specify the text of the message at the command +standard input. +The message is terminated by either end-of-file or by a single period +alone on a line. This is compatible to +.B mail +and +.BR mailx . +Alternatively, you can specify the text of the message at the command line with the -.B \-body +.B \-bodytext .I text -switch. If the standard input has zero -length, +switch. +.PP +If the standard input has zero length, .B mhmail -will not send the message. You can use the switch -.B \-body -`' to force an empty message. +will not send the message. You can use +.B \-bodytext +"" to force an empty message. .PP Normally, addresses appearing as arguments are put in the `To:' field. If the diff --git a/uip/mhmail.c b/uip/mhmail.c index 5c7f002..a85899d 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 @@ -42,8 +42,6 @@ main(int argc, char **argv) { pid_t child_id; int status, iscc = 0, nvec; - unsigned int i; - int somebody; char *cp, *tolist = NULL, *cclist = NULL, *subject = NULL; char *from = NULL, *body = NULL, **argp, **arguments; char *vec[5], buf[BUFSIZ]; @@ -139,16 +137,24 @@ main(int argc, char **argv) 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);