diff options
Diffstat (limited to 'sys/compat/ibcs2/ibcs2_misc.c')
-rw-r--r-- | sys/compat/ibcs2/ibcs2_misc.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/sys/compat/ibcs2/ibcs2_misc.c b/sys/compat/ibcs2/ibcs2_misc.c index 8688ded925e..e22a525f44c 100644 --- a/sys/compat/ibcs2/ibcs2_misc.c +++ b/sys/compat/ibcs2/ibcs2_misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ibcs2_misc.c,v 1.19 2001/11/06 19:53:17 miod Exp $ */ +/* $OpenBSD: ibcs2_misc.c,v 1.20 2002/02/12 18:41:20 art Exp $ */ /* $NetBSD: ibcs2_misc.c,v 1.23 1997/01/15 01:37:49 perry Exp $ */ /* @@ -434,15 +434,16 @@ ibcs2_sys_getdents(p, v, retval) if ((error = getvnode(p->p_fd, SCARG(uap, fd), &fp)) != 0) return (error); + FREF(fp); args.resid = SCARG(uap, nbytes); args.outp = (caddr_t)SCARG(uap, buf); - - if ((error = readdir_with_callback(fp, &fp->f_offset, args.resid, - ibcs2_readdir_callback, &args)) != 0) + error = readdir_with_callback(fp, &fp->f_offset, args.resid, + ibcs2_readdir_callback, &args) + FRELE(fp); + if (error) return (error); *retval = SCARG(uap, nbytes) - args.resid; - return (0); } @@ -474,15 +475,17 @@ ibcs2_sys_read(p, v, retval) if (vp->v_type != VDIR) return sys_read(p, uap, retval); + FREF(fp); args.resid = SCARG(uap, nbytes); args.outp = (caddr_t)SCARG(uap, buf); - - if ((error = readdir_with_callback(fp, &fp->f_offset, args.resid, - ibcs2_classicread_callback, &args)) != 0) + + error = readdir_with_callback(fp, &fp->f_offset, args.resid, + ibcs2_classicread_callback, &args); + FRELE(fp); + if (error) return (error); - - *retval = SCARG(uap, nbytes) - args.resid; - + + *retval = SCARG(uap, nbytes) - args.resid; return (0); } |