svn commit: r336303 - head/bin/sh

Jilles Tjoelker jilles at FreeBSD.org
Sun Jul 15 09:14:31 UTC 2018


Author: jilles
Date: Sun Jul 15 09:14:30 2018
New Revision: 336303
URL: https://svnweb.freebsd.org/changeset/base/336303

Log:
  sh: Don't use padvance() for MAIL/MAILPATH
  
  Using padvance() requires undoing its append of '/' and prevents adjusting
  its '%' logic to allow most directories with '%' in PATH.
  
  No functional change is intended.

Modified:
  head/bin/sh/mail.c

Modified: head/bin/sh/mail.c
==============================================================================
--- head/bin/sh/mail.c	Sun Jul 15 05:29:39 2018	(r336302)
+++ head/bin/sh/mail.c	Sun Jul 15 09:14:30 2018	(r336303)
@@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$");
  */
 
 #include "shell.h"
-#include "exec.h"	/* defines padvance() */
 #include "mail.h"
 #include "var.h"
 #include "output.h"
@@ -72,9 +71,9 @@ void
 chkmail(int silent)
 {
 	int i;
-	const char *mpath;
+	char *mpath;
 	char *p;
-	char *q;
+	char *msg;
 	struct stackmark smark;
 	struct stat statb;
 
@@ -83,22 +82,25 @@ chkmail(int silent)
 	if (nmboxes == 0)
 		return;
 	setstackmark(&smark);
-	mpath = mpathset()? mpathval() : mailval();
+	mpath = stsavestr(mpathset()? mpathval() : mailval());
 	for (i = 0 ; i < nmboxes ; i++) {
-		p = padvance(&mpath, "");
-		if (p == NULL)
-			break;
+		p = mpath;
 		if (*p == '\0')
-			continue;
-		for (q = p ; *q ; q++);
-		if (q[-1] != '/')
-			abort();
-		q[-1] = '\0';			/* delete trailing '/' */
+			break;
+		mpath = strchrnul(mpath, ':');
+		if (*mpath != '\0') {
+			*mpath++ = '\0';
+			if (p == mpath - 1)
+				continue;
+		}
+		msg = strchr(p, '%');
+		if (msg != NULL)
+			*msg++ = '\0';
 #ifdef notdef /* this is what the System V shell claims to do (it lies) */
 		if (stat(p, &statb) < 0)
 			statb.st_mtime = 0;
 		if (statb.st_mtime > mailtime[i] && ! silent) {
-			out2str(pathopt? pathopt : "you have mail");
+			out2str(msg? msg : "you have mail");
 			out2c('\n');
 		}
 		mailtime[i] = statb.st_mtime;
@@ -106,7 +108,7 @@ chkmail(int silent)
 		if (stat(p, &statb) < 0)
 			statb.st_size = 0;
 		if (statb.st_size > mailtime[i] && ! silent) {
-			out2str(pathopt? pathopt : "you have mail");
+			out2str(msg? msg : "you have mail");
 			out2c('\n');
 		}
 		mailtime[i] = statb.st_size;


More information about the svn-src-head mailing list