diff options
author | avg <avg@FreeBSD.org> | 2009-02-19 15:05:30 +0000 |
---|---|---|
committer | avg <avg@FreeBSD.org> | 2009-02-19 15:05:30 +0000 |
commit | 15d500a57e6b707a1a36908ccd272a1c35cf7a0f (patch) | |
tree | 973974c823ba55113b2a595911612aafa1a8dab8 | |
parent | 8ee3583cc864d8a5035215d558de11774ca4ec0b (diff) | |
download | FreeBSD-src-15d500a57e6b707a1a36908ccd272a1c35cf7a0f.zip FreeBSD-src-15d500a57e6b707a1a36908ccd272a1c35cf7a0f.tar.gz |
fs/udf: fix incorrect error return (-1) when reading a large dir
Not enough space in user-land buffer is not an error, userland
will read further until eof is reached. So instead of propagating
-1 to caller we convert it to zero/success.
cd9660 code works exactly the same way.
PR: kern/78987
Reviewed by: jhb (mentor)
Approved by: jhb (mentor)
-rw-r--r-- | sys/fs/udf/udf_vnops.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/fs/udf/udf_vnops.c b/sys/fs/udf/udf_vnops.c index 05481bc..9ac9495 100644 --- a/sys/fs/udf/udf_vnops.c +++ b/sys/fs/udf/udf_vnops.c @@ -831,17 +831,16 @@ udf_readdir(struct vop_readdir_args *a) error = udf_uiodir(&uiodir, dir.d_reclen, uio, ds->this_off); } - if (error) { - printf("uiomove returned %d\n", error); + if (error) break; - } - } /* tell the calling layer whether we need to be called again */ *a->a_eofflag = uiodir.eofflag; uio->uio_offset = ds->offset + ds->off; + if(error < 0) + error = 0; if (!error) error = ds->error; |