Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

std: fix readdir errors for solaris #34776

Merged
merged 4 commits into from
Jul 14, 2016
Merged

Conversation

cuviper
Copy link
Member

@cuviper cuviper commented Jul 12, 2016

A NULL from readdir could be the end of stream or an error. The only
way to know is to check errno, so it must be set to a known value first,
like a 0 that POSIX will never use.

This currently only matters for solaris targets, as the other unix platforms
are using readdir_r with a direct error return indication. However, this is
getting deprecated (#34668) so they should all eventually switch to readdir.

This PR adds set_errno, uses it to clear the value before calling readdir,
then checks it again after to see the reason for a NULL. A few other small
fixes are included just to get solaris compiling at all.

I couldn't get cross-compilation completely going, so I don't have a good way
to test this beyond a smoke-test cargo build of std. I'd appreciate input from
someone more familiar with solaris -- cc @nbaksalyar?

The `use ffi::CStr` in `unix/thread.rs` was previously guarded, but now
all platforms need it for `Thread::set_name()`.  Newlib and Solaris do
nothing here, as they have no way to set a thread name, but they still
define the same method signature.
Like BSDs, Solaris maps `IPV6_ADD_MEMBERSHIP` and `IPV6_DROP_MEMBERSHIP`
from `IPV6_JOIN_GROUP` and `IPV6_LEAVE_GROUP` respectively.
A `NULL` from `readdir` could be the end of stream or an error.  The
only way to know is to check `errno`, so it must be set to a known value
first, like a 0 that POSIX will never use.

This patch adds `set_errno`, uses it to clear the value before calling
`readdir`, then checks it again after to see the reason for a `NULL`.
@rust-highfive
Copy link
Collaborator

r? @alexcrichton

(rust_highfive has picked a reviewer for you, use r? to override)

@alexcrichton
Copy link
Member

@bors: r+ 79fb552

Thanks!

@bors
Copy link
Contributor

bors commented Jul 14, 2016

⌛ Testing commit 79fb552 with merge 935bd76...

bors added a commit that referenced this pull request Jul 14, 2016
std: fix `readdir` errors for solaris

A `NULL` from `readdir` could be the end of stream or an error.  The only
way to know is to check `errno`, so it must be set to a known value first,
like a 0 that POSIX will never use.

This currently only matters for solaris targets, as the other unix platforms
are using `readdir_r` with a direct error return indication.  However, this is
getting deprecated (#34668) so they should all eventually switch to `readdir`.

This PR adds `set_errno`, uses it to clear the value before calling `readdir`,
then checks it again after to see the reason for a `NULL`.  A few other small
fixes are included just to get solaris compiling at all.

I couldn't get cross-compilation completely going, so I don't have a good way
to test this beyond a smoke-test cargo build of std.  I'd appreciate input from
someone more familiar with solaris -- cc @nbaksalyar?
@bors bors merged commit 79fb552 into rust-lang:master Jul 14, 2016
@cuviper cuviper deleted the solaris-readdir branch September 26, 2017 06:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants