=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/from/from.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- src/usr.bin/from/from.c 2015/06/03 02:35:50 1.19 +++ src/usr.bin/from/from.c 2015/06/03 18:08:54 1.20 @@ -1,4 +1,4 @@ -/* $OpenBSD: from.c,v 1.19 2015/06/03 02:35:50 millert Exp $ */ +/* $OpenBSD: from.c,v 1.20 2015/06/03 18:08:54 millert Exp $ */ /* $NetBSD: from.c,v 1.6 1995/09/01 01:39:10 jtc Exp $ */ /* @@ -39,14 +39,15 @@ #include #include #include +#include int match(char *, char *); -FILE *open_mbox(const char *file, const char *user); +char *mail_spool(char *file, const char *user); int main(int argc, char *argv[]) { - int ch, newline; + int ch, newline, fflag = 0; char *file, *line, *sender, *p; size_t linesize = 0; ssize_t linelen; @@ -56,6 +57,7 @@ while ((ch = getopt(argc, argv, "f:s:")) != -1) { switch(ch) { case 'f': + fflag = 1; file = optarg; break; case 's': @@ -72,8 +74,12 @@ } argv += optind; - if ((fp = open_mbox(file, *argv)) == NULL) - exit(1); + file = mail_spool(file, *argv); + if ((fp = fopen(file, "r")) == NULL) { + if (!fflag && errno == ENOENT) + exit(EXIT_SUCCESS); + err(1, "%s", file); + } for (newline = 1; (linelen = getline(&line, &linesize, fp)) != -1;) { if (*line == '\n') { newline = 1; @@ -88,12 +94,10 @@ exit(EXIT_SUCCESS); } -FILE * -open_mbox(const char *file, const char *user) +char * +mail_spool(char *file, const char *user) { struct passwd *pwd; - char *buf = NULL; - FILE *fp; /* * We find the mailbox by: @@ -115,15 +119,11 @@ } } if (file == NULL) { - if (asprintf(&buf, "%s/%s", _PATH_MAILDIR, user) == -1) + if (asprintf(&file, "%s/%s", _PATH_MAILDIR, user) == -1) err(1, NULL); - file = buf; } } - if ((fp = fopen(file, "r")) == NULL) - warn("%s", file); - free(buf); - return(fp); + return(file); } int