new timeofday and interval timer stuff; itimers need testing
[unix-history] / usr / src / sys / kern / vfs_lookup.c
index 10de02f..b0e54c9 100644 (file)
@@ -1,4 +1,4 @@
-/*     vfs_lookup.c    4.21    82/08/03        */
+/*     vfs_lookup.c    4.24    82/08/24        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -9,6 +9,7 @@
 #include "../h/user.h"
 #include "../h/buf.h"
 #include "../h/conf.h"
 #include "../h/user.h"
 #include "../h/buf.h"
 #include "../h/conf.h"
+#include "../h/uio.h"
 
 struct buf *blkatoff();
 int    dirchk = 1;
 
 struct buf *blkatoff();
 int    dirchk = 1;
@@ -313,7 +314,7 @@ found:
         * Found component in pathname; save directory
         * entry in u.u_dent, and release directory buffer.
         */
         * Found component in pathname; save directory
         * entry in u.u_dent, and release directory buffer.
         */
-       bcopy((caddr_t)ep, (caddr_t)&u.u_dent, DIRSIZ(ep));
+       bcopy((caddr_t)ep, (caddr_t)&u.u_dent, (u_int)DIRSIZ(ep));
        brelse(bp);
        bp = NULL;
 
        brelse(bp);
        bp = NULL;
 
@@ -388,8 +389,7 @@ found:
         * Check for symbolic link
         */
        if ((dp->i_mode & IFMT) == IFLNK && (follow || *cp == '/')) {
         * Check for symbolic link
         */
        if ((dp->i_mode & IFMT) == IFLNK && (follow || *cp == '/')) {
-               int pathlen = strlen(cp) + 1;
-               int bn;
+               u_int pathlen = strlen(cp) + 1;
 
                if (dp->i_size + pathlen >= MAXPATHLEN - 1 ||
                    ++nlink > MAXSYMLINKS) {
 
                if (dp->i_size + pathlen >= MAXPATHLEN - 1 ||
                    ++nlink > MAXSYMLINKS) {
@@ -397,11 +397,9 @@ found:
                        goto bad2;
                }
                bcopy(cp, nbp->b_un.b_addr + dp->i_size, pathlen);
                        goto bad2;
                }
                bcopy(cp, nbp->b_un.b_addr + dp->i_size, pathlen);
-               u.u_segflg = 1;
-               u.u_base = nbp->b_un.b_addr;
-               u.u_count = dp->i_size;
-               u.u_offset = 0;
-               readi(dp);
+               u.u_error =
+                   rdwri(UIO_READ, dp, nbp->b_un.b_addr, dp->i_size,
+                       0, 1, (int *)0);
                if (u.u_error)
                        goto bad2;
                cp = nbp->b_un.b_addr;
                if (u.u_error)
                        goto bad2;
                cp = nbp->b_un.b_addr;
@@ -457,7 +455,6 @@ dirbad(ip, how)
 dirbadname(ep)
        register struct direct *ep;
 {
 dirbadname(ep)
        register struct direct *ep;
 {
-       register char *cp;
        register int i;
 
        for (i = 0; i < ep->d_namlen; i++)
        register int i;
 
        for (i = 0; i < ep->d_namlen; i++)
@@ -478,9 +475,9 @@ direnter(ip)
        struct inode *ip;
 {
        register struct direct *ep, *nep;
        struct inode *ip;
 {
        register struct direct *ep, *nep;
-       struct fs *fs;
        struct buf *bp;
        struct buf *bp;
-       int loc, dsize, freespace, newentrysize;
+       int loc, freespace;
+       u_int dsize, newentrysize;
        char *dirbuf;
 
        u.u_dent.d_ino = ip->i_number;
        char *dirbuf;
 
        u.u_dent.d_ino = ip->i_number;
@@ -496,10 +493,8 @@ direnter(ip)
                if (u.u_offset&(DIRBLKSIZ-1))
                        panic("wdir: newblk");
                u.u_dent.d_reclen = DIRBLKSIZ;
                if (u.u_offset&(DIRBLKSIZ-1))
                        panic("wdir: newblk");
                u.u_dent.d_reclen = DIRBLKSIZ;
-               u.u_count = newentrysize;
-               u.u_base = (caddr_t)&u.u_dent;
-               u.u_segflg = 1;
-               writei(u.u_pdir);
+               (void) rdwri(UIO_WRITE, u.u_pdir, (caddr_t)&u.u_dent, newentrysize,
+                   u.u_offset, 1, (int *)0);
                iput(u.u_pdir);
                return;
        }
                iput(u.u_pdir);
                return;
        }
@@ -559,7 +554,7 @@ direnter(ip)
 /*ZZ*/if((loc&~0x1ff)!=(loc+nep->d_reclen-1&~0x1ff))
 /*ZZ*/printf("wdir: compact loc %d reclen %d (dir %s/%d)\n",loc,nep->d_reclen,
 /*ZZ*/u.u_pdir->i_fs->fs_fsmnt,u.u_pdir->i_number);
 /*ZZ*/if((loc&~0x1ff)!=(loc+nep->d_reclen-1&~0x1ff))
 /*ZZ*/printf("wdir: compact loc %d reclen %d (dir %s/%d)\n",loc,nep->d_reclen,
 /*ZZ*/u.u_pdir->i_fs->fs_fsmnt,u.u_pdir->i_number);
-               bcopy(nep, ep, dsize);
+               bcopy((caddr_t)nep, (caddr_t)ep, dsize);
        }
        /*
         * Update the pointer fields in the previous entry (if any),
        }
        /*
         * Update the pointer fields in the previous entry (if any),
@@ -588,7 +583,6 @@ direnter(ip)
 dirremove()
 {
        register struct inode *dp = u.u_pdir;
 dirremove()
 {
        register struct inode *dp = u.u_pdir;
-       register struct fs *fs = dp->i_fs;
        register struct buf *bp;
        struct direct *ep;
 
        register struct buf *bp;
        struct direct *ep;
 
@@ -598,16 +592,14 @@ dirremove()
                 */
 /*ZZ*/if(u.u_offset&0x1ff)printf("missed dir compact dir %s/%d off %d file %s\n"
 /*ZZ*/,dp->i_fs->fs_fsmnt,dp->i_number,u.u_offset,u.u_dent.d_name);
                 */
 /*ZZ*/if(u.u_offset&0x1ff)printf("missed dir compact dir %s/%d off %d file %s\n"
 /*ZZ*/,dp->i_fs->fs_fsmnt,dp->i_number,u.u_offset,u.u_dent.d_name);
-               u.u_base = (caddr_t)&u.u_dent;
-               u.u_count = DIRSIZ(&u.u_dent);
-               u.u_segflg = 1;
                u.u_dent.d_ino = 0;
                u.u_dent.d_ino = 0;
-               writei(dp);
+               (void) rdwri(UIO_WRITE, dp, (caddr_t)&u.u_dent, DIRSIZ(&u.u_dent),
+                   u.u_offset, 1, (int *)0);
        } else {
                /*
                 * Collapse new free space into previous entry.
                 */
        } else {
                /*
                 * Collapse new free space into previous entry.
                 */
-               bp = blkatoff(dp, u.u_offset - u.u_count, (char **)&ep);
+               bp = blkatoff(dp, (int)(u.u_offset - u.u_count), (char **)&ep);
                if (bp == 0)
                        return (0);
                ep->d_reclen += u.u_dent.d_reclen;
                if (bp == 0)
                        return (0);
                ep->d_reclen += u.u_dent.d_reclen;