xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 44e6909a6d33689cefb283ecb91dfe1d874f8e0b
parent e00baa9f5d15d745a26cbb0a9ae54e3ea4fb9696
Author: kaashoek <kaashoek>
Date:   Thu,  7 Sep 2006 03:16:15 +0000

more simplifying

Diffstat:
Msh.c | 27++++++++++++---------------
1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/sh.c b/sh.c @@ -6,7 +6,7 @@ #define BUFSIZ 512 #define MAXARGS 10 -#define MAXNODE 2 +#define MAXIO 2 #define MAXCMD 2 // an embarrassingly naive shell @@ -22,7 +22,7 @@ struct cmd { char argv0buf[BUFSIZ]; int argc; int token; - struct ionode iolist[MAXNODE]; + struct ionode iolist[MAXIO]; struct ionode *io; }; struct cmd cmdlist[MAXCMD]; @@ -75,30 +75,28 @@ parse(char *s) cmd->argv[cmd->argc++] = t; break; - case '<': // Input redirection + case '>': // Input and output redirection + case '<': // Grab the filename from the argument list if(gettoken(0, &t) != 'w') { - printf(2, "syntax error: < not followed by word\n"); + printf(2, "syntax error: > not followed by word\n"); return -1; } - cmd->io->token = '<'; - cmd->io->s = t; - cmd->io++; - break; - - case '>': // Output redirection - // Grab the filename from the argument list - if(gettoken(0, &t) != 'w') { - printf(2, "syntax error: > not followed by word\n"); + if(cmd->io - cmd->iolist >= MAXIO) { + printf(2, "too many redirections\n"); return -1; } - cmd->io->token = '>'; + cmd->io->token = c; cmd->io->s = t; cmd->io++; break; case ';': // command sequence case '|': // pipe + if(cmd->io - cmd->iolist >= MAXIO) { + printf(2, "too many redirections\n"); + return -1; + } cmd->token = c; cmd++; break; @@ -114,7 +112,6 @@ parse(char *s) } } - void runcmd(void) {