On 22-12-16 02:21AM, Tim Chase wrote: > According to the POSIX definitions for mail(1) & mailx(1), the > (s)ave command should save to "mbox" if the filename is not specified > > ... > > However, when exercising this functionality, mail(1) on OpenBSD > (also tested on FreeBSD where the same issue manifests[1]) doesn't > support this: > > demo$ echo test | mail -s "test" demo # send self a message > demo$ mail > Mail version 8.1 6/6/93. Type ? for help. > "/var/mail/demo": 1 message 1 new > >N 1 [email protected] Thu Dec 15 19:34 19/775 "test" > & s > No file specified.
Current behaviour comports with the mail(1) manual page, so support for
this may be intentionally elided; I'm not sure. In either case, here's
a minimal diff making the change.
Index: cmd2.c
===================================================================
RCS file: /cvs/src/usr.bin/mail/cmd2.c,v
retrieving revision 1.22
diff -u -p -r1.22 cmd2.c
--- cmd2.c 16 Oct 2015 17:56:07 -0000 1.22
+++ cmd2.c 16 Dec 2022 12:59:21 -0000
@@ -139,6 +139,7 @@ copycmd(void *v)
/*
* Save/copy the indicated messages at the end of the passed file name.
+ * If no file name is specified, default to user mbox.
* If mark is true, mark the message "saved."
*/
int
@@ -208,10 +209,11 @@ swrite(void *v)
/*
* Snarf the file from the end of the command line and
* return a pointer to it. If there is no file attached,
- * just return NULL. Put a null in front of the file
+ * return the mbox file. Put a null in front of the file
* name so that the message list processing won't see it,
- * unless the file name is the only thing on the line, in
- * which case, return 0 in the reference flag variable.
+ * unless the file name is the only thing on the line, or
+ * no file was attached, in which case, return 0 in the
+ * reference flag variable.
*/
char *
snarf(char *linebuf, int *flag)
@@ -234,8 +236,8 @@ snarf(char *linebuf, int *flag)
while (cp > linebuf && !isspace((unsigned char)*cp))
cp--;
if (*cp == '\0') {
- puts("No file specified.");
- return(NULL);
+ *flag = 0;
+ return(expand("&"));
}
if (isspace((unsigned char)*cp))
*cp++ = 0;
Index: mail.1
===================================================================
RCS file: /cvs/src/usr.bin/mail/mail.1,v
retrieving revision 1.83
diff -u -p -r1.83 mail.1
--- mail.1 31 Mar 2022 17:27:25 -0000 1.83
+++ mail.1 16 Dec 2022 12:59:22 -0000
@@ -633,6 +633,9 @@ retained fields.
.Pq Ic s
Takes a message list and a filename and appends each message in
turn to the end of the file.
+If filename is omitted, the
+.Ar mbox
+file is used.
The filename in quotes, followed by the line
count and character count is echoed on the user's terminal.
.It Ic saveignore
--
Mark Jamsek <fnc.bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
signature.asc
Description: PGP signature
