From 8787cd01dfa6080d219f3dd7bbf03f3eb988a74e Mon Sep 17 00:00:00 2001 From: kaashoek Date: Sat, 19 Aug 2006 23:41:34 +0000 Subject: chdir cd in shell nits in mkdir, ls, etc. --- sh.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'sh.c') diff --git a/sh.c b/sh.c index e2b8959..9e0cb3f 100644 --- a/sh.c +++ b/sh.c @@ -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'; } -- cgit v1.2.3