diff options
author | Nicholas Noll <nbnoll@eml.cc> | 2021-11-16 15:21:55 -0800 |
---|---|---|
committer | Nicholas Noll <nbnoll@eml.cc> | 2021-11-16 15:21:55 -0800 |
commit | d1caabb4cd9f283f8e21e742c42e1ceb454133dc (patch) | |
tree | a9e9a027e8092757b8e72c4825cbaecff7c40ce4 /src/cmd/rc/lex.c | |
parent | e923adef5df8077259ed9973a4bffb0e08999fbe (diff) |
Feat: added fd duplications
Diffstat (limited to 'src/cmd/rc/lex.c')
-rw-r--r-- | src/cmd/rc/lex.c | 35 |
1 files changed, 19 insertions, 16 deletions
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'<c){ + if(c<'0'||'9'<c){ badredir: *w = 0; yyerror(node->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++ = ']'; } |