summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--sh.c21
-rw-r--r--user.h5
3 files changed, 8 insertions, 22 deletions
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*);