Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Jul 2018 09:14:30 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r336303 - head/bin/sh
Message-ID:  <201807150914.w6F9EU0i037530@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807150914.w6F9EU0i037530>