From d1caabb4cd9f283f8e21e742c42e1ceb454133dc Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Tue, 16 Nov 2021 15:21:55 -0800 Subject: Feat: added fd duplications --- src/cmd/rc/lex.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src/cmd/rc/lex.c') diff --git a/src/cmd/rc/lex.c b/src/cmd/rc/lex.c index a22dc7d..b02a403 100644 --- a/src/cmd/rc/lex.c +++ b/src/cmd/rc/lex.c @@ -467,7 +467,7 @@ yylex(void) *w++='['; c = advance(); *w++ = c; - if(c<'0' || '9'type == Tpipe ? "pipe syntax" : "redirection syntax"); @@ -484,23 +484,26 @@ yylex(void) *w++ = '='; if(node->type==Tredir) node->type = Tdup; + c = advance(); + + if(c < '0' || '9' < c){ + if(node->type == Tpipe) + goto badredir; + node->redir.type = Rclose; + }else{ + node->redir.type = Rdupfd; + node->redir.fd[1] = node->redir.fd[0]; + node->redir.fd[0] = 0; + do{ + node->redir.fd[0] = 10*node->redir.fd[0]+(c-'0'); + *w++ = c; + c = advance(); + }while('0'<=c && c<='9'); + } } - if(c < '0' || '9' < c){ - if(node->type == Tpipe) - goto badredir; - node->redir.type = Rclose; - }else{ - node->redir.type = Rdupfd; - node->redir.fd[1] = node->redir.fd[0]; - node->redir.fd[0] = 0; - do{ - node->redir.fd[0] = 10*node->redir.fd[0]+(c-'0'); - *w++ = c; - c = advance(); - }while('0'<=c && c<='9'); - } - if(c != ']' || (node->type == Tdup && (node->redir.type = Rhere || node->redir.type == Rappend))) + if(c != ']' + || (node->type == Tdup && (node->redir.type == Rhere || node->redir.type == Rappend))) goto badredir; *w++ = ']'; } -- cgit v1.2.1