Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/bin/sh PR/49125: Havard Eidnes: /bin/sh does not support red...



details:   https://anonhg.NetBSD.org/src/rev/9a6049b2d898
branches:  trunk
changeset: 331681:9a6049b2d898
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Aug 19 12:36:58 2014 +0000

description:
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.

diffstat:

 bin/sh/parser.c |  18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diffs (61 lines):

diff -r 5cda8fece19f -r 9a6049b2d898 bin/sh/parser.c
--- a/bin/sh/parser.c   Tue Aug 19 07:28:45 2014 +0000
+++ b/bin/sh/parser.c   Tue Aug 19 12:36:58 2014 +0000
@@ -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 @@
        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 @@
        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 @@
  */
 
 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 @@
                        break;
                }
        }
-       if (fd != '\0')
-               np->nfile.fd = digit_val(fd);
+       if (*fd != '\0')
+               np->nfile.fd = number(fd);
        redirnode = np;
        goto parseredir_return;
 }



Home | Main Index | Thread Index | Old Index