Fix fd_readdir on BSD-style nixes (#81)
* Fix fd_readdir on BSD-style nixes The fix was tested on Darwin-XNU and FreeBSD. The change introduces thread-safe cache of (RawFd, *mut libc::DIR) pairs so that libc::fdopendir syscall is called only once when invoking fd_readdir for the first time, and then the pointer to the directory stream, *mut libc::DIR, is reused until the matching raw file descriptor is closed. This fix allows then correct use (and matching to the implementation on Linux kernels) of libc::seekdir and libc::rewinddir to seek through and rewind the existing directory stream, *mut libc::DIR, which otherwise seems to be reset/invalidated every time libc::fdopendir is called (unlike on Linux, where this behaviour is not observed). * Store dir stream as part of the FdEntry's Descriptor * Move bsd specifics into separate module * Add todo comments and fix formatting * Refactor int conversions * Emphasise in debug logs that we're looking at fd_readdir entry * Change visibility of FdEntry and related to public-private * Rewrite creating DirStream for the first time
This commit is contained in:
17
build.rs
17
build.rs
@@ -154,26 +154,11 @@ fn avoid_keywords(name: &str) -> &str {
|
||||
}
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(linux)] {
|
||||
/// Ignore tests that aren't supported yet.
|
||||
fn ignore(_testsuite: &str, _name: &str) -> bool {
|
||||
if testsuite == "misc_testsuite" {
|
||||
match name {
|
||||
"path_rename_trailing_slashes" => true,
|
||||
"path_symlink_trailing_slashes" => true,
|
||||
"remove_directory_trailing_slashes" => true,
|
||||
_ => false,
|
||||
}
|
||||
} else {
|
||||
unreachable!()
|
||||
}
|
||||
}
|
||||
} else if #[cfg(not(any(linux, windows)))] {
|
||||
if #[cfg(not(windows))] {
|
||||
/// Ignore tests that aren't supported yet.
|
||||
fn ignore(testsuite: &str, name: &str) -> bool {
|
||||
if testsuite == "misc_testsuite" {
|
||||
match name {
|
||||
"fd_readdir" => true,
|
||||
"path_rename_trailing_slashes" => true,
|
||||
"path_symlink_trailing_slashes" => true,
|
||||
"remove_directory_trailing_slashes" => true,
|
||||
|
||||
Reference in New Issue
Block a user