Skip to content

Update redox sys #43544

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

Merged
merged 2 commits into from
Jul 30, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/libstd/sys/redox/ext/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ pub mod ffi;
pub mod fs;
pub mod io;
pub mod process;
pub mod thread;

/// A prelude for conveniently writing platform-specific code.
///
Expand All @@ -46,5 +47,7 @@ pub mod prelude {
#[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")]
pub use super::fs::{FileTypeExt, PermissionsExt, OpenOptionsExt, MetadataExt};
#[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")]
pub use super::thread::JoinHandleExt;
#[doc(no_inline)] #[stable(feature = "rust1", since = "1.0.0")]
pub use super::process::{CommandExt, ExitStatusExt};
}
47 changes: 47 additions & 0 deletions src/libstd/sys/redox/ext/thread.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

//! Unix-specific extensions to primitives in the `std::thread` module.

#![stable(feature = "thread_extensions", since = "1.9.0")]

use sys_common::{AsInner, IntoInner};
use thread::JoinHandle;

#[stable(feature = "thread_extensions", since = "1.9.0")]
#[allow(deprecated)]
pub type RawPthread = usize;

/// Unix-specific extensions to `std::thread::JoinHandle`
#[stable(feature = "thread_extensions", since = "1.9.0")]
pub trait JoinHandleExt {
/// Extracts the raw pthread_t without taking ownership
#[stable(feature = "thread_extensions", since = "1.9.0")]
fn as_pthread_t(&self) -> RawPthread;

/// Consumes the thread, returning the raw pthread_t
///
/// This function **transfers ownership** of the underlying pthread_t to
/// the caller. Callers are then the unique owners of the pthread_t and
/// must either detach or join the pthread_t once it's no longer needed.
#[stable(feature = "thread_extensions", since = "1.9.0")]
fn into_pthread_t(self) -> RawPthread;
}

#[stable(feature = "thread_extensions", since = "1.9.0")]
impl<T> JoinHandleExt for JoinHandle<T> {
fn as_pthread_t(&self) -> RawPthread {
self.as_inner().id() as RawPthread
}

fn into_pthread_t(self) -> RawPthread {
self.into_inner().into_id() as RawPthread
}
}
4 changes: 2 additions & 2 deletions src/libstd/sys/redox/fd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ impl FileDesc {
}

pub fn set_cloexec(&self) -> io::Result<()> {
let mut flags = cvt(syscall::fcntl(self.fd, syscall::F_GETFL, 0))?;
let mut flags = cvt(syscall::fcntl(self.fd, syscall::F_GETFD, 0))?;
flags |= syscall::O_CLOEXEC;
cvt(syscall::fcntl(self.fd, syscall::F_SETFL, flags)).and(Ok(()))
cvt(syscall::fcntl(self.fd, syscall::F_SETFD, flags)).and(Ok(()))
}

pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> {
Expand Down
12 changes: 6 additions & 6 deletions src/libstd/sys/redox/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,21 +272,21 @@ impl Command {

if let Some(fd) = stdio.stderr.fd() {
t!(cvt(syscall::dup2(fd, 2, &[])));
let mut flags = t!(cvt(syscall::fcntl(2, syscall::F_GETFL, 0)));
let mut flags = t!(cvt(syscall::fcntl(2, syscall::F_GETFD, 0)));
flags &= ! syscall::O_CLOEXEC;
t!(cvt(syscall::fcntl(2, syscall::F_SETFL, flags)));
t!(cvt(syscall::fcntl(2, syscall::F_SETFD, flags)));
}
if let Some(fd) = stdio.stdout.fd() {
t!(cvt(syscall::dup2(fd, 1, &[])));
let mut flags = t!(cvt(syscall::fcntl(1, syscall::F_GETFL, 0)));
let mut flags = t!(cvt(syscall::fcntl(1, syscall::F_GETFD, 0)));
flags &= ! syscall::O_CLOEXEC;
t!(cvt(syscall::fcntl(1, syscall::F_SETFL, flags)));
t!(cvt(syscall::fcntl(1, syscall::F_SETFD, flags)));
}
if let Some(fd) = stdio.stdin.fd() {
t!(cvt(syscall::dup2(fd, 0, &[])));
let mut flags = t!(cvt(syscall::fcntl(0, syscall::F_GETFL, 0)));
let mut flags = t!(cvt(syscall::fcntl(0, syscall::F_GETFD, 0)));
flags &= ! syscall::O_CLOEXEC;
t!(cvt(syscall::fcntl(0, syscall::F_SETFL, flags)));
t!(cvt(syscall::fcntl(0, syscall::F_SETFD, flags)));
}

if let Some(g) = self.gid {
Expand Down
6 changes: 4 additions & 2 deletions src/libstd/sys/redox/syscall/flag.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ pub const EVENT_NONE: usize = 0;
pub const EVENT_READ: usize = 1;
pub const EVENT_WRITE: usize = 2;

pub const F_GETFL: usize = 1;
pub const F_SETFL: usize = 2;
pub const F_GETFD: usize = 1;
pub const F_SETFD: usize = 2;
pub const F_GETFL: usize = 3;
pub const F_SETFL: usize = 4;

pub const FUTEX_WAIT: usize = 0;
pub const FUTEX_WAKE: usize = 1;
Expand Down