summaryrefslogtreecommitdiff
path: root/src/sys/ioctl
diff options
context:
space:
mode:
authorBryant Mairs <bryantmairs@google.com>2018-01-30 19:52:49 -0800
committerBryant Mairs <bryantmairs@google.com>2018-04-10 08:35:43 -0700
commit5dad660fd4b53918214dc741bf0c2e2b20b655db (patch)
treee9f9133eeae384e94acd3511ef2eb442540d1aa8 /src/sys/ioctl
parent1a815f11473c1eb91a5613f8fe67d5e97975b3fc (diff)
downloadnix-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.rs3
-rw-r--r--src/sys/ioctl/linux.rs3
-rw-r--r--src/sys/ioctl/mod.rs4
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))
}