diff options
author | kaashoek <kaashoek> | 2006-08-19 23:41:34 +0000 |
---|---|---|
committer | kaashoek <kaashoek> | 2006-08-19 23:41:34 +0000 |
commit | 8787cd01dfa6080d219f3dd7bbf03f3eb988a74e (patch) | |
tree | 7b1d86071a74d01013995508be4c5a267d0f23e2 /sh.c | |
parent | ceb0e427962d0656e672955585c04093b9efda90 (diff) | |
download | xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.tar.gz xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.tar.bz2 xv6-labs-8787cd01dfa6080d219f3dd7bbf03f3eb988a74e.zip |
chdir
cd in shell
nits in mkdir, ls, etc.
Diffstat (limited to 'sh.c')
-rw-r--r-- | sh.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -15,15 +15,20 @@ main(void) while(1){ puts("$ "); + memset (buf, '\0', sizeof(buf)); gets(buf, sizeof(buf)); if(buf[0] == '\0') continue; pid = fork(); if(pid == 0){ parse(buf); - exec(buf, args); - printf(1, "%s: not found\n", buf); - exit(); + if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == '\0') { // cd + chdir(&buf[3]); + } else { + exec(buf, args); + printf(1, "%s: not found\n", buf); + exit(); + } } if(pid > 0) wait(); @@ -39,11 +44,12 @@ parse(char buf[]) for (i = 0; buf[i] != '\0'; i++) { if (buf[i] == ' ') { buf[i] = '\0'; - args[j++] = buf + i+1; + args[j++] = buf + i + 1; if (j >= 100) { printf(2, "too many args\n"); exit(); } } } + args[j] = '\0'; } |