diff options
author | ru <ru@FreeBSD.org> | 2012-03-02 14:05:50 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2012-03-02 14:05:50 +0000 |
commit | 2cfd87717af00101b0095d9fcc4fada0b79bce0b (patch) | |
tree | bcf98aa3a1d8f529820b60a04f45a5e2fbfd6e9f /lib | |
parent | 7ee846fb9d134b670e5ea6706ff5236548918d47 (diff) | |
download | FreeBSD-src-2cfd87717af00101b0095d9fcc4fada0b79bce0b.zip FreeBSD-src-2cfd87717af00101b0095d9fcc4fada0b79bce0b.tar.gz |
Removed excessive _seekdir() call in closedir(). This saves one lseek()
syscall. Before r5958, seekdir() was called for its side effect of
freeing memory allocated by opendir() for rewinddir(), but that revision
added _reclaim_telldir() that frees all memory allocated by telldir()
calls, making this call redundant.
This introduces a slight change. If an application duplicated the descriptor
obtained through dirfd(), it can no longer rely on file position to be
reset to the start of file after a call to closedir(). It's believed to
be safe because neither POSIX, nor any other OS I've tested (NetBSD, Linux,
OS X) rewind the file offset pointer on closedir().
Reported by: Igor Sysoev
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/closedir.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/lib/libc/gen/closedir.c b/lib/libc/gen/closedir.c index 44e2bdf..5db351b 100644 --- a/lib/libc/gen/closedir.c +++ b/lib/libc/gen/closedir.c @@ -48,14 +48,12 @@ __FBSDID("$FreeBSD$"); * close a directory. */ int -closedir(dirp) - DIR *dirp; +closedir(DIR *dirp) { int fd; if (__isthreaded) _pthread_mutex_lock(&dirp->dd_lock); - _seekdir(dirp, dirp->dd_rewind); /* free seekdir storage */ fd = dirp->dd_fd; dirp->dd_fd = -1; dirp->dd_loc = 0; |