On Fri, Sep 05, 2008 at 10:48:45PM +0300, Kostik Belousov wrote: > 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(): > > > > _seekdir(dirp, dirp->dd_rewind); /* free seekdir storage */ > > > > It seems that free()ing libc seekdir storage should be done without > > calling lseek(). > > > > Other strange place for me is stat() before open() in opendir() > > > > /* > > * stat() before _open() because opening of special files may be > > * harmful. _fstat() after open because the file may have changed. > > */ > > > > 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.
BTW, OpenBSD does not worry about tapes :), they use open()/fstat() from the very start. And closedir() does not lseek() since OpenBSD 4.0. -- Igor Sysoev http://sysoev.ru/en/ _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"