aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/rc/lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/rc/lex.c')
-rw-r--r--src/cmd/rc/lex.c35
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++ = ']';
}