Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Sep 2008 22:48:45 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Igor Sysoev <is@rambler-co.ru>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: opendir()/closedir()
Message-ID:  <20080905194845.GV2038@deviant.kiev.zoral.com.ua>
In-Reply-To: <20080905184032.GA71993@rambler-co.ru>
References:  <20080905184032.GA71993@rambler-co.ru>

next in thread | previous in thread | raw e-mail | index | archive | help

--t/OLoFZ234xJS33u
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Sep 05, 2008 at 10:40:32PM +0400, Igor Sysoev wrote:
> Looking at opendir()/readdir()/closedir() sequence via ktrace,
> I've seen supposedly useless lseek() syscall just before close().
> It's called from closedir():
>=20
>         _seekdir(dirp, dirp->dd_rewind);        /* free seekdir storage */
>=20
> It seems that free()ing libc seekdir storage should be done without
> calling lseek().
>=20
> Other strange place for me is stat() before open() in opendir()
>=20
>         /*
>          * stat() before _open() because opening of special files may be
>          * harmful.  _fstat() after open because the file may have change=
d.
>          */
>=20
> What is the case when opening special file may be harmful ?

For instance, tape may be rewinded.

The whole opendir/seekdir/telldir probably should be synced with OpenBSD
version, at least due to SINGLEUSE. I made this conclusion when I merged
the OpenBSD fix for seekdir several months ago. But I also decided then
that I am not a volunteer.

--t/OLoFZ234xJS33u
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkjBjR0ACgkQC3+MBN1Mb4i5ZACgy0o29M427E7EXlZCGET3NWjX
t2EAn1LfapVOUX8PBSaIZrKl1mU+QT2n
=yCdT
-----END PGP SIGNATURE-----

--t/OLoFZ234xJS33u--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080905194845.GV2038>