Bug 198819 - rewinddir(3) after fdopendir(3) results in double entries
Summary: rewinddir(3) after fdopendir(3) results in double entries
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 10.1-RELEASE
Hardware: amd64 Any
: --- Affects Some People
Assignee: freebsd-bugs mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-03-23 05:17 UTC by Mark Williams
Modified: 2015-03-23 05:17 UTC (History)
0 users

See Also:


Attachments
example program that produces incorrect output on UFS (666 bytes, text/x-csrc)
2015-03-23 05:17 UTC, Mark Williams
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Williams 2015-03-23 05:17:59 UTC
Created attachment 154687 [details]
example program that produces incorrect output on UFS

The attached program attempts to list the current working directory.  It obtains a pointer to the directory stream via fdopendir(3) and then calls rewinddir(3) before a standard loop over readdir(3).

On two out of four machines I tested, the program lists the contents of the current directory twice, like so:

$ ls -1
.
..
readdir_duplicate_entries
readdir_duplicate_entries.c
$ ./readdir_duplicate_entries 
.
..
readdir_duplicate_entries.c
readdir_duplicate_entries
.
..
readdir_duplicate_entries.c
readdir_duplicate_entries
$

The program produces the correct output if rewinddir(3) is not called or if opendir(3) is called instead of open(2)/fdopendir(3).

uname -a for the affected machines:

FreeBSD lithos.ferv.org 10.1-RELEASE-p5 FreeBSD 10.1-RELEASE-p5 #0: Tue Jan 27 08:55:07 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
FreeBSD ip-172-31-19-241 10.1-RELEASE-p6 FreeBSD 10.1-RELEASE-p6 #0: Tue Feb 24 19:00:21 UTC 2015     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

All mounts on both of the affected machines are UFS.

All mounts on the the third and fourth machines, on which the test program produced *correct* output, are ZFS.

uname information for those:

FreeBSD glob 10.0-RELEASE-p9 FreeBSD 10.0-RELEASE-p9 #0: Mon Sep 15 14:35:52 UTC 2014     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
FreeBSD 10.1-RELEASE-p6 (GENERIC) #0: Tue Feb 24 19:00:21 UTC 2015