diff --git a/fs.c b/fs.c index eef20e8..1256937 100644 --- a/fs.c +++ b/fs.c @@ -247,6 +247,7 @@ iunlockput(struct inode *ip) iput(ip); } +//PAGEBREAK! // Allocate a new inode with the given type on device dev. struct inode* ialloc(uint dev, short type) @@ -295,6 +296,7 @@ iupdate(struct inode *ip) brelse(bp); } +//PAGEBREAK! // Inode contents // // The contents (data) associated with each inode is stored @@ -522,6 +524,7 @@ dirlink(struct inode *dp, char *name, uint ino) return 0; } +//PAGEBREAK! // Paths // Copy the next path element from path into name. @@ -560,6 +563,21 @@ skipelem(char *path, char *name) return path; } +static struct inode* _namei(char*, int, char*); + +struct inode* +namei(char *path) +{ + char name[DIRSIZ]; + return _namei(path, 0, name); +} + +struct inode* +nameiparent(char *path, char *name) +{ + return _namei(path, 1, name); +} + // Look up and return the inode for a path name. // If parent is set, return the inode for the parent // and write the final path element to name, which @@ -602,15 +620,3 @@ _namei(char *path, int parent, char *name) return ip; } -struct inode* -namei(char *path) -{ - char name[DIRSIZ]; - return _namei(path, 0, name); -} - -struct inode* -nameiparent(char *path, char *name) -{ - return _namei(path, 1, name); -} diff --git a/sysfile.c b/sysfile.c index e05defe..1182e17 100644 --- a/sysfile.c +++ b/sysfile.c @@ -74,14 +74,17 @@ sys_write(void) } int -sys_fstat(void) +sys_dup(void) { struct file *f; - struct stat *st; + int fd; - if(argfd(0, 0, &f) < 0 || argptr(1, (void*)&st, sizeof(*st)) < 0) + if(argfd(0, 0, &f) < 0) return -1; - return filestat(f, st); + if((fd=fdalloc(f)) < 0) + return -1; + fileincref(f); + return fd; } int @@ -97,6 +100,17 @@ sys_close(void) return 0; } +int +sys_fstat(void) +{ + struct file *f; + struct stat *st; + + if(argfd(0, 0, &f) < 0 || argptr(1, (void*)&st, sizeof(*st)) < 0) + return -1; + return filestat(f, st); +} + // Create the path new as a link to the same inode as old. int sys_link(void) @@ -152,6 +166,7 @@ isdirempty(struct inode *dp) return 1; } +//PAGEBREAK! int sys_unlink(void) { @@ -344,20 +359,6 @@ sys_chdir(void) return 0; } -int -sys_dup(void) -{ - struct file *f; - int fd; - - if(argfd(0, 0, &f) < 0) - return -1; - if((fd=fdalloc(f)) < 0) - return -1; - fileincref(f); - return fd; -} - int sys_exec(void) {