diff --git a/Makefile b/Makefile index c1099d4..5d5d2fe 100644 --- a/Makefile +++ b/Makefile @@ -128,8 +128,8 @@ rm : rm.o $(ULIB) mkfs : mkfs.c fs.h cc -o mkfs mkfs.c -fs.img : mkfs userfs usertests echo cat readme init sh ls mkdir rm fstests - ./mkfs fs.img userfs usertests echo cat readme init sh ls mkdir rm fstests +fs.img : mkfs userfs usertests echo cat README init sh ls mkdir rm fstests + ./mkfs fs.img userfs usertests echo cat README init sh ls mkdir rm fstests -include *.d diff --git a/sh.c b/sh.c index 5da556e..b2905e7 100644 --- a/sh.c +++ b/sh.c @@ -162,37 +162,24 @@ ioredirection(void) for (i = 0; i < nextnode; i++) { switch (list[i].token) { case '<': + if (close(0) < 0) + printf(2, "close 0 failed\n"); if ((fd = open(list[i].s, O_RDONLY)) < 0) { printf(2, "failed to open %s for read: %d", list[i].s, fd); return -1; } - if (debug) printf(2, "redirect 0 from %s\n", list[i].s); - - close(0); - if ((dfd = dup(fd)) < 0) - printf(2, "dup failed\n"); - if (debug) - printf(2, "dup returns %d\n", dfd); - close(fd); break; case '>': + if (close(1) < 0) + printf(2, "close 1 failed\n"); if ((fd = open(list[i].s, O_WRONLY|O_CREATE)) < 0) { printf(2, "failed to open %s for write: %d", list[i].s, fd); exit(); } - if (debug) printf(2, "redirect 1 to %s\n", list[i].s); - - if (close(1) < 0) - printf(2, "close 1 failed\n"); - if ((dfd = dup(fd)) < 0) - printf(2, "dup failed\n"); - if (debug) - printf(2, "dup returns %d\n", dfd); - close(fd); break; } } diff --git a/user.h b/user.h index 428d786..8016eac 100644 --- a/user.h +++ b/user.h @@ -1,14 +1,12 @@ +// system calls int fork(void); int exit(void) __attribute__((noreturn)); int wait(void); -int cons_putc(int); int pipe(int*); int write(int, void*, int); int read(int, void*, int); int close(int); int kill(int); -int panic(char*); -int cons_puts(char*); int exec(char *, char **); int open(char *, int); int mknod (char*,short,short,short); @@ -21,6 +19,7 @@ int dup(int); int getpid(); char *sbrk(int); +// ulib.c int stat(char *, struct stat *stat); int puts(char*); char* strcpy(char*, char*);