--- /dev/null
+#!/bin/sh
+##########################################################
+# Test incorporating mail from stdin with `inc -file -`. #
+##########################################################
+. "$MH_TEST_COMMON"
+
+# Test empty stdin from a pipe.
+runandcheck "printf '' |inc -file -" <<!
+Incorporating new mail into inbox...
+
+inc: no messages incorporated, continuing...
+!
+
+# Test empty stdin from redirected regular file.
+cd "$MMH_TEST_DIR"
+f=mbox
+runandcheck "printf '' >$f && inc -file - <$f" <<!
+Incorporating new mail into inbox...
+
+inc: no messages incorporated, continuing...
+!
+rm "$f"
+unset f
+
+# Test empty stdin from character device.
+runandcheck "inc -file - </dev/null" <<!
+Incorporating new mail into inbox...
+
+inc: no messages incorporated, continuing...
+!
+
+# Test nonempty pipe.
+runandcheck "packf +inbox |inc -file -" <<!
+Incorporating new mail into inbox...
+
+ 11+ 2006-09-29 00:00 Test1 Testing message 1
+ 12 2006-09-29 00:00 Test2 Testing message 2
+ 13 2006-09-29 00:00 Test3 Testing message 3
+ 14 2006-09-29 00:00 Test4 Testing message 4
+ 15 2006-09-29 00:00 Test5 Testing message 5
+ 16 2006-09-29 00:00 Test6 Testing message 6
+ 17 2006-09-29 00:00 Test7 Testing message 7
+ 18 2006-09-29 00:00 Test8 Testing message 8
+ 19 2006-09-29 00:00 Test9 Testing message 9
+ 20 2006-09-29 00:00 Test10 Testing message 10
+!
+
+# Test nonempty redirected stdin.
+cd "$MMH_TEST_DIR"
+f=mbox
+runandcheck "packf +inbox 1-10 >$f && inc -file - <$f" <<!
+Incorporating new mail into inbox...
+
+ 21+ 2006-09-29 00:00 Test1 Testing message 1
+ 22 2006-09-29 00:00 Test2 Testing message 2
+ 23 2006-09-29 00:00 Test3 Testing message 3
+ 24 2006-09-29 00:00 Test4 Testing message 4
+ 25 2006-09-29 00:00 Test5 Testing message 5
+ 26 2006-09-29 00:00 Test6 Testing message 6
+ 27 2006-09-29 00:00 Test7 Testing message 7
+ 28 2006-09-29 00:00 Test8 Testing message 8
+ 29 2006-09-29 00:00 Test9 Testing message 9
+ 30 2006-09-29 00:00 Test10 Testing message 10
+!
+rm "$f"
+unset f
continue;
case FILESW:
- if (!(cp = *argp++) || *cp == '-')
+ if (!(cp = *argp++))
adios(EX_USAGE, NULL, "missing argument to %s",
argp[-2]);
- from = mh_xstrdup(expanddir(cp));
+ from = (strcmp(cp, "-")==0) ? "-" : mh_xstrdup(expanddir(cp));
/*
** If the truncate file is in default state,
/* guarantee dropping group priveleges; we might not have done so earlier */
DROPGROUPPRIVS();
- /*
- ** We will get the mail from a file
- ** (typically the standard maildrop)
- */
- if (from)
- newmail = from;
- else if ((newmail = getenv("MAILDROP")) && *newmail)
- newmail = toabsdir(newmail);
- else if ((newmail = context_find("maildrop")) && *newmail)
- newmail = toabsdir(newmail);
- else {
- newmail = concat(mailspool, "/", getusername(), NULL);
- }
- if (stat(newmail, &s1) == NOTOK || s1.st_size == 0)
- adios(EX_DATAERR, NULL, "no mail to incorporate");
+ if (from && strcmp(from, "-")==0) {
+ /* We'll read mail from stdin. */
+ newmail = NULL;
+ } else {
+ /* We'll read mail from a file. */
+ if (from)
+ newmail = from;
+ else if ((newmail = getenv("MAILDROP")) && *newmail)
+ newmail = toabsdir(newmail);
+ else if ((newmail = context_find("maildrop")) && *newmail)
+ newmail = toabsdir(newmail);
+ else {
+ newmail = concat(mailspool, "/", getusername(), NULL);
+ }
+ if (stat(newmail, &s1) == NOTOK || s1.st_size == 0)
+ adios(EX_DATAERR, NULL, "no mail to incorporate");
- if ((cp = strdup(newmail)) == NULL)
- adios(EX_OSERR, NULL, "error allocating memory to copy newmail");
+ if ((cp = strdup(newmail)) == NULL)
+ adios(EX_OSERR, NULL, "error allocating memory to copy newmail");
- newmail = cp;
+ newmail = cp;
+ }
if (!folder)
folder = getdeffol();
if (!(mp = folder_read(folder)))
adios(EX_IOERR, NULL, "unable to read folder %s", folder);
- if (access(newmail, W_OK) != NOTOK) {
+ if (!newmail) {
+ trnflag = 0;
+ in = stdin;
+ } else if (access(newmail, W_OK) != NOTOK) {
locked++;
if (trnflag) {
SIGNAL(SIGHUP, SIG_IGN);
else
admonish(newmail, "error zero'ing");
}
- } else if (noisy) {
+ } else if (noisy && newmail) {
printf("%s not zero'd\n", newmail);
}