Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Aug 2015 21:44:16 +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: r286788 - head/bin/sh
Message-ID:  <201508142144.t7ELiGbq082167@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Fri Aug 14 21:44:15 2015
New Revision: 286788
URL: https://svnweb.freebsd.org/changeset/base/286788

Log:
  sh: When setting option via long name, don't go via letter.
  
  Looking up the letter makes no sense and prevents adding options that only
  have a long name, no letter.

Modified:
  head/bin/sh/options.c

Modified: head/bin/sh/options.c
==============================================================================
--- head/bin/sh/options.c	Fri Aug 14 20:08:16 2015	(r286787)
+++ head/bin/sh/options.c	Fri Aug 14 21:44:15 2015	(r286788)
@@ -73,6 +73,7 @@ char *minusc;			/* argument to -c option
 static void options(int);
 static void minus_o(char *, int);
 static void setoption(int, int);
+static void setoptionbyindex(int, int);
 static int getopts(char *, char *, char **, char ***, char **);
 
 
@@ -269,7 +270,7 @@ minus_o(char *name, int val)
 	} else {
 		for (i = 0; i < NOPTS; i++)
 			if (equal(name, optlist[i].name)) {
-				setoption(optlist[i].letter, val);
+				setoptionbyindex(i, val);
 				return;
 			}
 		error("Illegal option -o %s", name);
@@ -278,26 +279,32 @@ minus_o(char *name, int val)
 
 
 static void
-setoption(int flag, int val)
+setoptionbyindex(int idx, int val)
 {
-	int i;
-
-	if (flag == 'p' && !val && privileged) {
+	if (optlist[idx].letter == 'p' && !val && privileged) {
 		if (setgid(getgid()) == -1)
 			error("setgid");
 		if (setuid(getuid()) == -1)
 			error("setuid");
 	}
+	optlist[idx].val = val;
+	if (val) {
+		/* #%$ hack for ksh semantics */
+		if (optlist[idx].letter == 'V')
+			Eflag = 0;
+		else if (optlist[idx].letter == 'E')
+			Vflag = 0;
+	}
+}
+
+static void
+setoption(int flag, int val)
+{
+	int i;
+
 	for (i = 0; i < NOPTS; i++)
 		if (optlist[i].letter == flag) {
-			optlist[i].val = val;
-			if (val) {
-				/* #%$ hack for ksh semantics */
-				if (flag == 'V')
-					Eflag = 0;
-				else if (flag == 'E')
-					Vflag = 0;
-			}
+			setoptionbyindex(i, val);
 			return;
 		}
 	error("Illegal option -%c", flag);



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