Delete a patch
Adjust typesetting of code
This commit is contained in:
parent
e559fd2c5a
commit
2c73068e82
2
mmu.h
2
mmu.h
|
@ -144,7 +144,6 @@ struct taskstate {
|
||||||
ushort iomb; // I/O map base address
|
ushort iomb; // I/O map base address
|
||||||
};
|
};
|
||||||
|
|
||||||
// PAGEBREAK: 12
|
|
||||||
// Gate descriptors for interrupts and traps
|
// Gate descriptors for interrupts and traps
|
||||||
struct gatedesc {
|
struct gatedesc {
|
||||||
uint off_15_0 : 16; // low 16 bits of offset in segment
|
uint off_15_0 : 16; // low 16 bits of offset in segment
|
||||||
|
@ -180,4 +179,3 @@ struct gatedesc {
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
5
runoff
5
runoff
|
@ -14,6 +14,7 @@ pad()
|
||||||
mkdir -p fmt
|
mkdir -p fmt
|
||||||
rm -f fmt/*
|
rm -f fmt/*
|
||||||
cp README fmt
|
cp README fmt
|
||||||
|
echo > fmt/blank
|
||||||
files=`grep -v '^#' runoff.list | awk '{print $1}'`
|
files=`grep -v '^#' runoff.list | awk '{print $1}'`
|
||||||
n=99
|
n=99
|
||||||
for i in $files
|
for i in $files
|
||||||
|
@ -214,7 +215,9 @@ awk '
|
||||||
# pr -t -2 t.defs | ../pr.pl -h "definitions" | pad
|
# pr -t -2 t.defs | ../pr.pl -h "definitions" | pad
|
||||||
pr -t -l50 -2 refs | ../pr.pl -h "cross-references" | pad
|
pr -t -l50 -2 refs | ../pr.pl -h "cross-references" | pad
|
||||||
# pr.pl -h "definitions" -2 t.defs | 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
|
for i in $files
|
||||||
do
|
do
|
||||||
../pr.pl -h "xv6/$i" $i
|
../pr.pl -h "xv6/$i" $i
|
||||||
|
|
151
symlink.patch
151
symlink.patch
|
@ -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)
|
|
Loading…
Reference in a new issue