summaryrefslogtreecommitdiff
path: root/sh.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-10 17:00:00 +0000
committerrsc <rsc>2007-08-10 17:00:00 +0000
commit9736728d23af42f740fcb217f418e3e8bdd9984d (patch)
treed7899b67930b32a9a204ee070c4c84b9d5ff6e92 /sh.c
parent7d4aef6cfd36c19583fafb7ae49a69c6ce47b680 (diff)
downloadxv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.gz
xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.bz2
xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.zip
cleanup main
Diffstat (limited to 'sh.c')
-rw-r--r--sh.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/sh.c b/sh.c
index e74fa72..382db8f 100644
--- a/sh.c
+++ b/sh.c
@@ -29,10 +29,11 @@ struct cmd cmdlist[MAXCMD];
struct cmd *cmd;
char buf[BUFSIZ];
-int debug = 0;
+int debug;
int parse(char *s);
void runcmd(void);
+int getcmd(char *buf, int nbuf);
int ioredirection(struct ionode *iolist, int nio);
int gettoken(char *s, char **token);
int _gettoken(char *s, char **p1, char **p2);
@@ -40,20 +41,25 @@ int _gettoken(char *s, char **p1, char **p2);
int
main(void)
{
- while(1){
- puts("$ ");
- memset(buf, 0, sizeof buf);
- gets(buf, sizeof buf);
- if(buf[0] == 0) // EOF
- break;
- if(parse(buf) < 0)
- continue;
- runcmd();
+ while(getcmd(buf, sizeof buf) >= 0) {
+ if(parse(buf) >= 0)
+ runcmd();
}
exit();
}
int
+getcmd(char *buf, int nbuf)
+{
+ puts("$ ");
+ memset(buf, 0, nbuf);
+ gets(buf, nbuf);
+ if(buf[0] == 0) // EOF
+ return -1;
+ return 0;
+}
+
+int
parse(char *s)
{
char *t;
@@ -61,13 +67,13 @@ parse(char *s)
gettoken(s, 0);
- cmd = &cmdlist[0];;
+ cmd = &cmdlist[0];
for(i = 0; i < MAXCMD; i++) {
cmdlist[i].argc = 0;
cmdlist[i].token = 0;
cmdlist[i].io = cmdlist[i].iolist;
}
- while(1) {
+ for(;;){
switch((c = gettoken(0, &t))) {
case 'w': // Add an argument