summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2017-08-28 00:09:44 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2017-08-28 00:09:44 +0000
commit202f30e64df0e43493db28473d15048d686ea31f (patch)
tree5254e08504fe7a9a4ed0b52103926c0e2b53802b
parent28c5b4a41a45a3ee5ec6c88927388b208f0449c3 (diff)
parentd322aa9a3f8e685eb6f48843f22ec12127f6251d (diff)
downloadnix-202f30e64df0e43493db28473d15048d686ea31f.zip
Merge #747
747: Use libc types for sched and syscall FFI r=Susurrus a=Susurrus
-rw-r--r--CHANGELOG.md5
-rw-r--r--src/sched.rs23
-rw-r--r--src/sys/memfd.rs5
-rw-r--r--src/sys/mod.rs3
-rw-r--r--src/sys/syscall.rs91
-rw-r--r--src/unistd.rs8
6 files changed, 14 insertions, 121 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 148f0c6d..9214b7e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -52,6 +52,11 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- Fix compilation and tests for OpenBSD targets
([#688](https://github.com/nix-rust/nix/pull/688))
+# Removed
+- The syscall module has been removed. This only exposed enough functionality for
+ `memfd_create()` and `pivot_root()`, which are still exposed as separate functions.
+ ([#747](https://github.com/nix-rust/nix/pull/747))
+
## [0.9.0] 2017-07-23
### Added
diff --git a/src/sched.rs b/src/sched.rs
index 943b432b..74c23072 100644
--- a/src/sched.rs
+++ b/src/sched.rs
@@ -73,25 +73,6 @@ impl CpuSet {
}
}
-mod ffi {
- use libc::{c_void, c_int};
-
- pub type CloneCb = extern "C" fn(data: *const super::CloneCb) -> c_int;
-
- // We cannot give a proper #[repr(C)] to super::CloneCb
- #[allow(improper_ctypes)]
- extern "C" {
- // create a child process
- // doc: http://man7.org/linux/man-pages/man2/clone.2.html
- pub fn clone(cb: *const CloneCb,
- child_stack: *mut c_void,
- flags: c_int,
- arg: *mut super::CloneCb,
- ...)
- -> c_int;
- }
-}
-
pub fn sched_setaffinity(pid: Pid, cpuset: &CpuSet) -> Result<()> {
let res = unsafe {
libc::sched_setaffinity(pid.into(),
@@ -116,10 +97,10 @@ pub fn clone(mut cb: CloneCb,
let combined = flags.bits() | signal.unwrap_or(0);
let ptr = stack.as_mut_ptr().offset(stack.len() as isize);
let ptr_aligned = ptr.offset((ptr as usize % 16) as isize * -1);
- ffi::clone(mem::transmute(callback as extern "C" fn(*mut Box<::std::ops::FnMut() -> isize>) -> i32),
+ libc::clone(mem::transmute(callback as extern "C" fn(*mut Box<::std::ops::FnMut() -> isize>) -> i32),
ptr_aligned as *mut c_void,
combined,
- &mut cb)
+ &mut cb as *mut _ as *mut c_void)
};
Errno::result(res).map(Pid::from_raw)
diff --git a/src/sys/memfd.rs b/src/sys/memfd.rs
index b9812943..056e9e43 100644
--- a/src/sys/memfd.rs
+++ b/src/sys/memfd.rs
@@ -11,8 +11,9 @@ bitflags!(
);
pub fn memfd_create(name: &CStr, flags: MemFdCreateFlag) -> Result<RawFd> {
- use sys::syscall::{syscall, MEMFD_CREATE};
- let res = unsafe { syscall(MEMFD_CREATE, name.as_ptr(), flags.bits()) };
+ let res = unsafe {
+ libc::syscall(libc::SYS_memfd_create, name.as_ptr(), flags.bits())
+ };
Errno::result(res).map(|r| r as RawFd)
}
diff --git a/src/sys/mod.rs b/src/sys/mod.rs
index c73a09cd..7326a2cf 100644
--- a/src/sys/mod.rs
+++ b/src/sys/mod.rs
@@ -31,9 +31,6 @@ pub mod socket;
pub mod stat;
-#[cfg(any(target_os = "linux", target_os = "android"))]
-pub mod syscall;
-
#[cfg(any(target_os = "linux"))]
pub mod reboot;
diff --git a/src/sys/syscall.rs b/src/sys/syscall.rs
deleted file mode 100644
index 50866ca7..00000000
--- a/src/sys/syscall.rs
+++ /dev/null
@@ -1,91 +0,0 @@
-//! Indirect system call
-//!
-use libc::c_int;
-
-pub use self::arch::*;
-
-#[cfg(target_arch = "x86_64")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 155;
- pub static MEMFD_CREATE: Syscall = 319;
-}
-
-#[cfg(target_arch = "x86")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 217;
- pub static MEMFD_CREATE: Syscall = 356;
-}
-
-#[cfg(target_arch = "aarch64")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 41;
- pub static MEMFD_CREATE: Syscall = 279;
-}
-
-#[cfg(target_arch = "arm")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 218;
- pub static MEMFD_CREATE: Syscall = 385;
-}
-
-// Rust on mips uses the N32 ABI
-#[cfg(target_arch = "mips")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 216;
- pub static MEMFD_CREATE: Syscall = 354;
-}
-
-// Rust on mips64 uses the N64 ABI
-#[cfg(target_arch = "mips64")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 151;
- pub static MEMFD_CREATE: Syscall = 314;
-}
-
-#[cfg(any(target_arch = "powerpc", target_arch = "powerpc64"))]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 203;
- pub static MEMFD_CREATE: Syscall = 360;
-}
-
-#[cfg(target_arch = "s390x")]
-mod arch {
- use libc::c_long;
-
- pub type Syscall = c_long;
-
- pub static SYSPIVOTROOT: Syscall = 217;
- pub static MEMFD_CREATE: Syscall = 350;
-}
-
-extern {
- pub fn syscall(num: Syscall, ...) -> c_int;
-}
diff --git a/src/unistd.rs b/src/unistd.rs
index af38cf2d..fad51272 100644
--- a/src/unistd.rs
+++ b/src/unistd.rs
@@ -16,7 +16,7 @@ use sys::stat::Mode;
use std::fmt;
#[cfg(any(target_os = "android", target_os = "linux"))]
-pub use self::linux::*;
+pub use self::pivot_root::*;
#[cfg(any(target_os = "android", target_os = "freebsd",
target_os = "linux", target_os = "openbsd"))]
@@ -1647,8 +1647,8 @@ pub fn sysconf(var: SysconfVar) -> Result<Option<c_long>> {
}
#[cfg(any(target_os = "android", target_os = "linux"))]
-mod linux {
- use sys::syscall::{syscall, SYSPIVOTROOT};
+mod pivot_root {
+ use libc;
use {Errno, Result, NixPath};
pub fn pivot_root<P1: ?Sized + NixPath, P2: ?Sized + NixPath>(
@@ -1656,7 +1656,7 @@ mod linux {
let res = try!(try!(new_root.with_nix_path(|new_root| {
put_old.with_nix_path(|put_old| {
unsafe {
- syscall(SYSPIVOTROOT, new_root.as_ptr(), put_old.as_ptr())
+ libc::syscall(libc::SYS_pivot_root, new_root.as_ptr(), put_old.as_ptr())
}
})
})));