Module Name:    src
Committed By:   christos
Date:           Tue Aug 19 12:36:58 UTC 2014

Modified Files:
        src/bin/sh: parser.c

Log Message:
PR/49125: Havard Eidnes: /bin/sh does not support redirecting to or from FDs > 9
According to:
http://pubs.opengroup.org/onlinepubs/009604599/utilities/xcu_chap02.html#tag_02_07

Redirection support for fds > 9 is optional but allowed.


To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/bin/sh/parser.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/sh/parser.c
diff -u src/bin/sh/parser.c:1.90 src/bin/sh/parser.c:1.91
--- src/bin/sh/parser.c:1.90	Wed Jan  1 14:50:44 2014
+++ src/bin/sh/parser.c	Tue Aug 19 08:36:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: parser.c,v 1.90 2014/01/01 19:50:44 christos Exp $	*/
+/*	$NetBSD: parser.c,v 1.91 2014/08/19 12:36:58 christos Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)parser.c	8.7 (Berkeley) 5/16/95";
 #else
-__RCSID("$NetBSD: parser.c,v 1.90 2014/01/01 19:50:44 christos Exp $");
+__RCSID("$NetBSD: parser.c,v 1.91 2014/08/19 12:36:58 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -647,8 +647,8 @@ void fixredir(union node *n, const char 
 	if (!err)
 		n->ndup.vname = NULL;
 
-	if (is_digit(text[0]) && text[1] == '\0')
-		n->ndup.dupfd = digit_val(text[0]);
+	if (is_number(text))
+		n->ndup.dupfd = number(text);
 	else if (text[0] == '-' && text[1] == '\0')
 		n->ndup.dupfd = -1;
 	else {
@@ -1149,8 +1149,7 @@ endword:
 	if (eofmark == NULL) {
 		if ((c == '>' || c == '<')
 		 && quotef == 0
-		 && len <= 2
-		 && (*out == '\0' || is_digit(*out))) {
+		 && (*out == '\0' || is_number(out))) {
 			PARSEREDIR();
 			return lasttoken = TREDIR;
 		} else {
@@ -1208,8 +1207,9 @@ checkend: {
  */
 
 parseredir: {
-	char fd = *out;
+	char fd[64];
 	union node *np;
+	strlcpy(fd, out, sizeof(fd));
 
 	np = (union node *)stalloc(sizeof (struct nfile));
 	if (c == '>') {
@@ -1258,8 +1258,8 @@ parseredir: {
 			break;
 		}
 	}
-	if (fd != '\0')
-		np->nfile.fd = digit_val(fd);
+	if (*fd != '\0')
+		np->nfile.fd = number(fd);
 	redirnode = np;
 	goto parseredir_return;
 }

Reply via email to