From 44e6909a6d33689cefb283ecb91dfe1d874f8e0b Mon Sep 17 00:00:00 2001 From: kaashoek Date: Thu, 7 Sep 2006 03:16:15 +0000 Subject: more simplifying --- sh.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'sh.c') diff --git a/sh.c b/sh.c index 2a418bb..4a43b27 100644 --- 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) { -- cgit v1.2.3