diff options
author | Bryant Mairs <bryantmairs@google.com> | 2018-01-30 19:52:49 -0800 |
---|---|---|
committer | Bryant Mairs <bryantmairs@google.com> | 2018-04-10 08:35:43 -0700 |
commit | 5dad660fd4b53918214dc741bf0c2e2b20b655db (patch) | |
tree | e9f9133eeae384e94acd3511ef2eb442540d1aa8 /src/sys/ioctl | |
parent | 1a815f11473c1eb91a5613f8fe67d5e97975b3fc (diff) | |
download | nix-5dad660fd4b53918214dc741bf0c2e2b20b655db.zip |
Correct the third argument to ioctl on appropriate platforms.
While usually `ioctl()` passes a pointer, the function call has been
overloaded to allow integers to be passed. For some platforms this
is an `int` and on others it's a `ulong`.
Fixes #824.
Diffstat (limited to 'src/sys/ioctl')
-rw-r--r-- | src/sys/ioctl/bsd.rs | 3 | ||||
-rw-r--r-- | src/sys/ioctl/linux.rs | 3 | ||||
-rw-r--r-- | src/sys/ioctl/mod.rs | 4 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/sys/ioctl/bsd.rs b/src/sys/ioctl/bsd.rs index b7c5345b..4c39fa6a 100644 --- a/src/sys/ioctl/bsd.rs +++ b/src/sys/ioctl/bsd.rs @@ -1,6 +1,9 @@ /// The datatype used for the ioctl number #[doc(hidden)] pub type ioctl_num_type = ::libc::c_ulong; +/// The datatype used for the 3rd argument +#[doc(hidden)] +pub type ioctl_param_type = ::libc::c_int; mod consts { use ::sys::ioctl::ioctl_num_type; diff --git a/src/sys/ioctl/linux.rs b/src/sys/ioctl/linux.rs index e0d02ad4..17c8cff9 100644 --- a/src/sys/ioctl/linux.rs +++ b/src/sys/ioctl/linux.rs @@ -5,6 +5,9 @@ pub type ioctl_num_type = ::libc::c_int; #[cfg(not(any(target_os = "android", target_env = "musl")))] #[doc(hidden)] pub type ioctl_num_type = ::libc::c_ulong; +/// The datatype used for the 3rd argument +#[doc(hidden)] +pub type ioctl_param_type = ::libc::c_ulong; #[doc(hidden)] pub const NRBITS: ioctl_num_type = 8; diff --git a/src/sys/ioctl/mod.rs b/src/sys/ioctl/mod.rs index 9c76fe96..e00e5934 100644 --- a/src/sys/ioctl/mod.rs +++ b/src/sys/ioctl/mod.rs @@ -519,7 +519,7 @@ cfg_if!{ ($(#[$attr:meta])* $name:ident, $ioty:expr, $nr:expr) => ( $(#[$attr])* pub unsafe fn $name(fd: $crate::libc::c_int, - data: $crate::libc::c_int) + data: $crate::sys::ioctl::ioctl_param_type) -> $crate::Result<$crate::libc::c_int> { convert_ioctl_res!($crate::libc::ioctl(fd, request_code_write_int!($ioty, $nr) as $crate::sys::ioctl::ioctl_num_type, data)) } @@ -556,7 +556,7 @@ cfg_if!{ ($(#[$attr:meta])* $name:ident, $ioty:expr, $nr:expr) => ( $(#[$attr])* pub unsafe fn $name(fd: $crate::libc::c_int, - data: $crate::libc::c_int) + data: $crate::sys::ioctl::ioctl_param_type) -> $crate::Result<$crate::libc::c_int> { convert_ioctl_res!($crate::libc::ioctl(fd, request_code_write!($ioty, $nr, ::std::mem::size_of::<$crate::libc::c_int>()) as $crate::sys::ioctl::ioctl_num_type, data)) } |