more simplifying
This commit is contained in:
parent
e00baa9f5d
commit
44e6909a6d
29
sh.c
29
sh.c
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#define BUFSIZ 512
|
#define BUFSIZ 512
|
||||||
#define MAXARGS 10
|
#define MAXARGS 10
|
||||||
#define MAXNODE 2
|
#define MAXIO 2
|
||||||
#define MAXCMD 2
|
#define MAXCMD 2
|
||||||
|
|
||||||
// an embarrassingly naive shell
|
// an embarrassingly naive shell
|
||||||
|
@ -22,7 +22,7 @@ struct cmd {
|
||||||
char argv0buf[BUFSIZ];
|
char argv0buf[BUFSIZ];
|
||||||
int argc;
|
int argc;
|
||||||
int token;
|
int token;
|
||||||
struct ionode iolist[MAXNODE];
|
struct ionode iolist[MAXIO];
|
||||||
struct ionode *io;
|
struct ionode *io;
|
||||||
};
|
};
|
||||||
struct cmd cmdlist[MAXCMD];
|
struct cmd cmdlist[MAXCMD];
|
||||||
|
@ -75,30 +75,28 @@ parse(char *s)
|
||||||
cmd->argv[cmd->argc++] = t;
|
cmd->argv[cmd->argc++] = t;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '<': // Input redirection
|
case '>': // Input and output redirection
|
||||||
// Grab the filename from the argument list
|
case '<':
|
||||||
if(gettoken(0, &t) != 'w') {
|
|
||||||
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
|
// Grab the filename from the argument list
|
||||||
if(gettoken(0, &t) != 'w') {
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
cmd->io->token = '>';
|
if(cmd->io - cmd->iolist >= MAXIO) {
|
||||||
|
printf(2, "too many redirections\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
cmd->io->token = c;
|
||||||
cmd->io->s = t;
|
cmd->io->s = t;
|
||||||
cmd->io++;
|
cmd->io++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ';': // command sequence
|
case ';': // command sequence
|
||||||
case '|': // pipe
|
case '|': // pipe
|
||||||
|
if(cmd->io - cmd->iolist >= MAXIO) {
|
||||||
|
printf(2, "too many redirections\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
cmd->token = c;
|
cmd->token = c;
|
||||||
cmd++;
|
cmd++;
|
||||||
break;
|
break;
|
||||||
|
@ -114,7 +112,6 @@ parse(char *s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
runcmd(void)
|
runcmd(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue