r8746: replace opendir/readdir/telldir/seekdir/closedir on systems where they
are broken (apparently all BSD systems). This breakage leads to unlink
on files in an open directory causing a later seekdir to miss
files. The bug happens due to a block boundary bug in the BSD libc
implementation of these calls.
This replacement code also fixes a severe memory usage problem with
telldir that can cause closedir() to take an arbitrary amount of time.
I have reported the bug in readdir to Greg Lehey (a FreeBSD maintainer)