Deleted Added
full compact
28c28
< * $Id: linux_file.c,v 1.2 1995/06/07 21:27:57 sos Exp $
---
> * $Id: linux_file.c,v 1.1 1995/06/25 17:32:34 sos Exp $
342c342
< int buflen, error, eofflag, nbytes, justone;
---
> int buflen, error, eofflag, nbytes, justone, blockoff;
348c348
< if ((error = getvnode(p->p_fd, args->fd, &fp)) != 0)
---
> if ((error = getvnode(p->p_fd, args->fd, &fp)) != 0) {
349a350
> }
359c360
< if ((error = VOP_GETATTR(vp, &va, p->p_ucred, p)))
---
> if ((error = VOP_GETATTR(vp, &va, p->p_ucred, p))) {
360a362
> }
370c372,374
< buflen = max(va.va_blocksize, nbytes);
---
> off = fp->f_offset;
> blockoff = off % va.va_blocksize;
> buflen = max(va.va_blocksize, (nbytes + blockoff));
373d376
< off = fp->f_offset;
383c386
< auio.uio_offset = off;
---
> auio.uio_offset = off - (off_t)blockoff;
386c389
< if (error)
---
> if (error) {
387a391
> }
389a394
> inp += blockoff;
392c397
< if ((len = buflen - auio.uio_resid) == 0)
---
> if ((len = buflen - auio.uio_resid - blockoff) == 0) {
393a399
> }
396,399d401
< reclen = ((struct dirent *) inp)->d_reclen;
< if (reclen & 3)
< panic("linux_readdir");
< off += reclen;
400a403,410
> reclen = bdp->d_reclen;
> if (reclen & 3) {
> printf("linux_readdir: reclen=%d\n", reclen);
> error = EFAULT;
> goto out;
> }
>
> off += reclen;
402a413
> len -= reclen;
414c425
< if ((error = copyout((caddr_t)&linux_dirent, outp, linuxreclen)))
---
> if ((error = copyout((caddr_t)&linux_dirent, outp, linuxreclen))) {
415a427
> }
429a442
>