diff --git a/mmu.h b/mmu.h index d009d97..a82d8e2 100644 --- a/mmu.h +++ b/mmu.h @@ -144,7 +144,6 @@ struct taskstate { ushort iomb; // I/O map base address }; -// PAGEBREAK: 12 // Gate descriptors for interrupts and traps struct gatedesc { uint off_15_0 : 16; // low 16 bits of offset in segment @@ -180,4 +179,3 @@ struct gatedesc { } #endif - diff --git a/runoff b/runoff index 26593af..be362d0 100755 --- a/runoff +++ b/runoff @@ -14,6 +14,7 @@ pad() mkdir -p fmt rm -f fmt/* cp README fmt +echo > fmt/blank files=`grep -v '^#' runoff.list | awk '{print $1}'` n=99 for i in $files @@ -214,7 +215,9 @@ awk ' # pr -t -2 t.defs | ../pr.pl -h "definitions" | pad pr -t -l50 -2 refs | ../pr.pl -h "cross-references" | pad # pr.pl -h "definitions" -2 t.defs | pad - # pr.pl -h "cross-references" -2 refs | pad + # pr.pl -h "cross-references" -2 refs | pad + ../pr.pl blank # make sheet 1 start on left page + ../pr.pl blank for i in $files do ../pr.pl -h "xv6/$i" $i diff --git a/symlink.patch b/symlink.patch deleted file mode 100644 index c7caf23..0000000 --- a/symlink.patch +++ /dev/null @@ -1,151 +0,0 @@ -diff -r f8a4e40ab1d6 fs.c ---- a/fs.c Thu Aug 30 14:32:06 2007 -0400 -+++ b/fs.c Thu Aug 30 14:29:02 2007 -0400 -@@ -577,12 +577,18 @@ skipelem(char *path, char *name) - // If parent != 0, return the inode for the parent and copy the final - // path element into name, which must have room for DIRSIZ bytes. - static struct inode* --_namei(char *path, int parent, char *name) -+_namei(struct inode *root, char *path, int parent, char *name, int depth) - { - struct inode *ip, *next; -+ char buf[100], tname[DIRSIZ]; -+ -+ if(depth > 5) -+ return 0; - - if(*path == '/') - ip = iget(ROOTDEV, 1); -+ else if(root) -+ ip = idup(root); - else - ip = idup(cp->cwd); - -@@ -598,10 +604,24 @@ _namei(char *path, int parent, char *nam - return ip; - } - if((next = dirlookup(ip, name, 0)) == 0){ -+ cprintf("did not find %s\n", name); - iunlockput(ip); - return 0; - } -- iunlockput(ip); -+ iunlock(ip); -+ ilock(next); -+ if(next->type == T_SYMLINK){ -+ if(next->size >= sizeof(buf) || readi(next, buf, 0, next->size) != next->size){ -+ iunlockput(next); -+ iput(ip); -+ return 0; -+ } -+ buf[next->size] = 0; -+ iunlockput(next); -+ next = _namei(ip, buf, 0, tname, depth+1); -+ }else -+ iunlock(next); -+ iput(ip); - ip = next; - } - if(parent){ -@@ -615,11 +635,11 @@ namei(char *path) - namei(char *path) - { - char name[DIRSIZ]; -- return _namei(path, 0, name); -+ return _namei(0, path, 0, name, 0); - } - - struct inode* - nameiparent(char *path, char *name) - { -- return _namei(path, 1, name); --} -+ return _namei(0, path, 1, name, 0); -+} -diff -r f8a4e40ab1d6 fs.h ---- a/fs.h Thu Aug 30 14:32:06 2007 -0400 -+++ b/fs.h Thu Aug 30 13:05:43 2007 -0400 -@@ -33,6 +33,7 @@ struct dinode { - #define T_DIR 1 // Directory - #define T_FILE 2 // File - #define T_DEV 3 // Special device -+#define T_SYMLINK 4 // Symlink - - // Inodes per block. - #define IPB (BSIZE / sizeof(struct dinode)) -diff -r f8a4e40ab1d6 syscall.c ---- a/syscall.c Thu Aug 30 14:32:06 2007 -0400 -+++ b/syscall.c Thu Aug 30 13:05:29 2007 -0400 -@@ -96,6 +96,7 @@ extern int sys_unlink(void); - extern int sys_unlink(void); - extern int sys_wait(void); - extern int sys_write(void); -+extern int sys_symlink(void); - - static int (*syscalls[])(void) = { - [SYS_chdir] sys_chdir, -@@ -118,6 +119,7 @@ static int (*syscalls[])(void) = { - [SYS_unlink] sys_unlink, - [SYS_wait] sys_wait, - [SYS_write] sys_write, -+[SYS_symlink] sys_symlink, - }; - - void -diff -r f8a4e40ab1d6 syscall.h ---- a/syscall.h Thu Aug 30 14:32:06 2007 -0400 -+++ b/syscall.h Thu Aug 30 13:02:48 2007 -0400 -@@ -19,3 +19,4 @@ - #define SYS_getpid 18 - #define SYS_sbrk 19 - #define SYS_sleep 20 -+#define SYS_symlink 21 -diff -r f8a4e40ab1d6 sysfile.c ---- a/sysfile.c Thu Aug 30 14:32:06 2007 -0400 -+++ b/sysfile.c Thu Aug 30 13:10:31 2007 -0400 -@@ -257,6 +257,21 @@ create(char *path, int canexist, short t - } - - int -+sys_symlink(void) -+{ -+ char *old, *new; -+ struct inode *ip; -+ -+ if(argstr(0, &old) < 0 || argstr(1, &new) < 0) -+ return -1; -+ if((ip = create(new, 0, T_SYMLINK, 0, 0)) == 0) -+ return -1; -+ writei(ip, old, 0, strlen(old)); -+ iunlockput(ip); -+ return 0; -+} -+ -+int - sys_open(void) - { - char *path; -@@ -393,3 +408,4 @@ sys_pipe(void) - fd[1] = fd1; - return 0; - } -+ -diff -r f8a4e40ab1d6 user.h ---- a/user.h Thu Aug 30 14:32:06 2007 -0400 -+++ b/user.h Thu Aug 30 13:02:34 2007 -0400 -@@ -21,6 +21,7 @@ int getpid(); - int getpid(); - char* sbrk(int); - int sleep(int); -+int symlink(int); - - // ulib.c - int stat(char*, struct stat*); -diff -r f8a4e40ab1d6 usys.S ---- a/usys.S Thu Aug 30 14:32:06 2007 -0400 -+++ b/usys.S Thu Aug 30 13:05:54 2007 -0400 -@@ -28,3 +28,4 @@ STUB(getpid) - STUB(getpid) - STUB(sbrk) - STUB(sleep) -+STUB(symlink)