[BACK]Return to ufs_vnops.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / ufs / ufs

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/ufs/ufs/ufs_vnops.c between version 1.144 and 1.145

version 1.144, 2006/12/09 16:11:52 version 1.145, 2006/12/26 14:50:08
Line 1595  ufs_readdir(void *v)
Line 1595  ufs_readdir(void *v)
         int             error;          int             error;
         size_t          count, ccount, rcount;          size_t          count, ccount, rcount;
         off_t           off, *ccp;          off_t           off, *ccp;
           off_t           startoff;
           size_t          skipbytes;
         struct ufsmount *ump = VFSTOUFS(vp->v_mount);          struct ufsmount *ump = VFSTOUFS(vp->v_mount);
         int nswap = UFS_MPNEEDSWAP(ump);          int nswap = UFS_MPNEEDSWAP(ump);
 #if BYTE_ORDER == LITTLE_ENDIAN  #if BYTE_ORDER == LITTLE_ENDIAN
Line 1609  ufs_readdir(void *v)
Line 1611  ufs_readdir(void *v)
         if (rcount < _DIRENT_MINSIZE(cdp) || count < _DIRENT_MINSIZE(ndp))          if (rcount < _DIRENT_MINSIZE(cdp) || count < _DIRENT_MINSIZE(ndp))
                 return EINVAL;                  return EINVAL;
   
           startoff = uio->uio_offset & ~(ump->um_dirblksiz - 1);
           skipbytes = uio->uio_offset - startoff;
           rcount += skipbytes;
   
         auio.uio_iov = &aiov;          auio.uio_iov = &aiov;
         auio.uio_iovcnt = 1;          auio.uio_iovcnt = 1;
         auio.uio_offset = uio->uio_offset;          auio.uio_offset = startoff;
         auio.uio_resid = rcount;          auio.uio_resid = rcount;
         UIO_SETUP_SYSSPACE(&auio);          UIO_SETUP_SYSSPACE(&auio);
         auio.uio_rw = UIO_READ;          auio.uio_rw = UIO_READ;
Line 1624  ufs_readdir(void *v)
Line 1630  ufs_readdir(void *v)
                 return error;                  return error;
         }          }
   
         rcount = rcount - auio.uio_resid;          rcount -= auio.uio_resid;
   
         cdp = (struct direct *)(void *)cdbuf;          cdp = (struct direct *)(void *)cdbuf;
         ecdp = (struct direct *)(void *)&cdbuf[rcount];          ecdp = (struct direct *)(void *)&cdbuf[rcount];
Line 1646  ufs_readdir(void *v)
Line 1652  ufs_readdir(void *v)
   
         while (cdp < ecdp) {          while (cdp < ecdp) {
                 cdp->d_reclen = ufs_rw16(cdp->d_reclen, nswap);                  cdp->d_reclen = ufs_rw16(cdp->d_reclen, nswap);
                   if (skipbytes > 0) {
                           if (cdp->d_reclen <= skipbytes) {
                                   skipbytes -= cdp->d_reclen;
                                   cdp = _DIRENT_NEXT(cdp);
                                   continue;
                           }
                           /*
                            * invlid cookie.
                            */
                           error = EINVAL;
                           goto out;
                   }
                 if (cdp->d_reclen == 0) {                  if (cdp->d_reclen == 0) {
                         struct dirent *ondp = ndp;                          struct dirent *ondp = ndp;
                         ndp->d_reclen = _DIRENT_MINSIZE(ndp);                          ndp->d_reclen = _DIRENT_MINSIZE(ndp);
Line 1678  ufs_readdir(void *v)
Line 1696  ufs_readdir(void *v)
                 cdp = _DIRENT_NEXT(cdp);                  cdp = _DIRENT_NEXT(cdp);
         }          }
   
         if (cdp >= ecdp)  
                 off = uio->uio_offset + rcount;  
   
         count = ((char *)(void *)ndp - ndbuf);          count = ((char *)(void *)ndp - ndbuf);
         error = uiomove(ndbuf, count, uio);          error = uiomove(ndbuf, count, uio);
   out:
         if (ap->a_cookies) {          if (ap->a_cookies) {
                 if (error)                  if (error)
                         free(*(ap->a_cookies), M_TEMP);                          free(*(ap->a_cookies), M_TEMP);

Legend:
Removed from v.1.144  
changed lines
  Added in v.1.145

CVSweb <webmaster@jp.NetBSD.org>