Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Apr 2017 12:37:43 +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: r316414 - head/bin/sh
Message-ID:  <201704021237.v32CbhUV082871@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sun Apr  2 12:37:43 2017
New Revision: 316414
URL: https://svnweb.freebsd.org/changeset/base/316414

Log:
  sh: Don't scan word twice in ${param+-word}.
  
  There is no longer a case where argbackq has already been advanced but the
  string pointer needs to be advanced.

Modified:
  head/bin/sh/expand.c

Modified: head/bin/sh/expand.c
==============================================================================
--- head/bin/sh/expand.c	Sun Apr  2 11:36:25 2017	(r316413)
+++ head/bin/sh/expand.c	Sun Apr  2 12:37:43 2017	(r316414)
@@ -753,15 +753,14 @@ again: /* jump here after setting a vari
 		break;
 
 	case VSNORMAL:
-		break;
+		return p;
 
 	case VSPLUS:
 	case VSMINUS:
 		if (!set) {
-			argstr(p, argbackq,
+			return argstr(p, argbackq,
 			    flag | (flag & EXP_SPLIT ? EXP_SPLIT_LIT : 0) |
 			    (varflags & VSQUOTE ? EXP_LIT_QUOTED : 0), dst);
-			break;
 		}
 		break;
 
@@ -769,10 +768,8 @@ again: /* jump here after setting a vari
 	case VSTRIMLEFTMAX:
 	case VSTRIMRIGHT:
 	case VSTRIMRIGHTMAX:
-		if (!set) {
-			set = 1;
+		if (!set)
 			break;
-		}
 		/*
 		 * Terminate the string and start recording the pattern
 		 * right after it
@@ -805,15 +802,14 @@ again: /* jump here after setting a vari
 		abort();
 	}
 
-	if (subtype != VSNORMAL) {	/* skip to end of alternative */
+	{	/* skip to end of alternative */
 		int nesting = 1;
 		for (;;) {
 			if ((c = *p++) == CTLESC)
 				p++;
-			else if (c == CTLBACKQ || c == (CTLBACKQ|CTLQUOTE)) {
-				if (set)
-					*argbackq = (*argbackq)->next;
-			} else if (c == CTLVAR) {
+			else if (c == CTLBACKQ || c == (CTLBACKQ|CTLQUOTE))
+				*argbackq = (*argbackq)->next;
+			else if (c == CTLVAR) {
 				if ((*p++ & VSTYPE) != VSNORMAL)
 					nesting++;
 			} else if (c == CTLENDVAR) {



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