ioctl-sys-0.6.0/.cargo_vcs_info.json0000644000000001121375506017000130210ustar { "git": { "sha1": "d7c1e95b9c467361d60fc34f848895835fa3e328" } } ioctl-sys-0.6.0/Cargo.lock0000644000000002141375506017000107770ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. [[package]] name = "ioctl-sys" version = "0.6.0" ioctl-sys-0.6.0/Cargo.toml0000644000000016711375506017000110320ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] name = "ioctl-sys" version = "0.6.0" authors = ["Cody P Schafer ", "Corey Richardson "] include = ["Cargo.toml", "**/*.rs"] description = "IO Control for POSIX-and-beyond systems (core fn & macros, see `ioctls` for many ioctl definitions)" documentation = "https://docs.rs/ioctl-sys/0.6.0" license = "MIT OR Apache-2.0" repository = "https://github.com/jmesmon/ioctl" [dependencies] ioctl-sys-0.6.0/Cargo.toml.orig010064400017500001750000000006541375506011600145240ustar 00000000000000[package] name = "ioctl-sys" version = "0.6.0" authors = ["Cody P Schafer ", "Corey Richardson "] description = "IO Control for POSIX-and-beyond systems (core fn & macros, see `ioctls` for many ioctl definitions)" license = "MIT OR Apache-2.0" repository = "https://github.com/jmesmon/ioctl" documentation = "https://docs.rs/ioctl-sys/0.6.0" include = ["Cargo.toml", "**/*.rs"] [dependencies] ioctl-sys-0.6.0/examples/smoke.rs010064400017500001750000000005501375505260000151310ustar 00000000000000#[macro_use] extern crate ioctl_sys; ioctl!(bad kiocsound with 0x4B2F); ioctl!(none drm_ioctl_set_master with b'd', 0x1e); ioctl!(read ev_get_version with b'E', 0x01; u32); ioctl!(write ev_set_repeat with b'E', 0x03; [u32; 2]); fn main() { let mut x = 0; let ret = unsafe { ev_get_version(0, &mut x) }; println!("returned {}, x = {}", ret, x); } ioctl-sys-0.6.0/src/lib.rs010064400017500001750000000012031375505771000135350ustar 00000000000000use std::os::raw::{c_int, c_ulong}; #[cfg(any(target_os = "linux", target_os = "macos", target_os = "android"))] #[macro_use] mod platform; #[cfg(any(target_os = "linux", target_os = "macos", target_os = "android"))] pub use platform::*; extern "C" { #[doc(hidden)] pub fn ioctl(fd: c_int, req: c_ulong, ...) -> c_int; } #[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "android")))] use platform_not_supported; #[cfg(doctest)] mod test_readme { macro_rules! external_doc_test { ($x:expr) => { #[doc = $x] extern {} }; } external_doc_test!(include_str!("../../README.md")); } ioctl-sys-0.6.0/src/platform/linux.rs010064400017500001750000000023301375505517300157550ustar 00000000000000#[cfg(target_arch = "mips")] mod consts { #[doc(hidden)] pub const NONE: u8 = 1; #[doc(hidden)] pub const READ: u8 = 2; #[doc(hidden)] pub const WRITE: u8 = 4; #[doc(hidden)] pub const SIZEBITS: u8 = 13; #[doc(hidden)] pub const DIRBITS: u8 = 3; } #[cfg(target_arch = "powerpc")] mod consts { #[doc(hidden)] pub const NONE: u8 = 1; #[doc(hidden)] pub const READ: u8 = 2; #[doc(hidden)] pub const WRITE: u8 = 4; #[doc(hidden)] pub const SIZEBITS: u8 = 13; #[doc(hidden)] pub const DIRBITS: u8 = 3; } #[cfg(not(any( target_arch = "powerpc", target_arch = "mips", target_arch = "x86", target_arch = "arm", target_arch = "x86_64", target_arch = "aarch64" )))] use this_arch_not_supported; // "Generic" ioctl protocol #[cfg(any( target_arch = "x86", target_arch = "arm", target_arch = "x86_64", target_arch = "aarch64" ))] mod consts { #[doc(hidden)] pub const NONE: u8 = 0; #[doc(hidden)] pub const READ: u8 = 2; #[doc(hidden)] pub const WRITE: u8 = 1; #[doc(hidden)] pub const SIZEBITS: u8 = 14; #[doc(hidden)] pub const DIRBITS: u8 = 2; } #[doc(hidden)] pub use self::consts::*; ioctl-sys-0.6.0/src/platform/macos.rs010064400017500001750000000007111375505517100157170ustar 00000000000000#[cfg(any(target_arch = "aarch64", target_arch = "x86_64"))] mod consts { #[doc(hidden)] pub const NONE: u8 = 1; #[doc(hidden)] pub const READ: u8 = 2; #[doc(hidden)] pub const WRITE: u8 = 4; #[doc(hidden)] pub const SIZEBITS: u8 = 13; #[doc(hidden)] pub const DIRBITS: u8 = 3; } #[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))] use this_arch_not_supported; #[doc(hidden)] pub use self::consts::*; ioctl-sys-0.6.0/src/platform/mod.rs010064400017500001750000000142401375505771000153770ustar 00000000000000#[doc(hidden)] pub const NRBITS: u32 = 8; #[doc(hidden)] pub const TYPEBITS: u32 = 8; #[cfg(any(target_os = "linux", target_os = "android"))] #[path = "linux.rs"] mod consts; #[cfg(target_os = "macos")] #[path = "macos.rs"] mod consts; #[doc(hidden)] pub use self::consts::*; #[doc(hidden)] pub const NRSHIFT: u32 = 0; #[doc(hidden)] pub const TYPESHIFT: u32 = NRSHIFT + NRBITS as u32; #[doc(hidden)] pub const SIZESHIFT: u32 = TYPESHIFT + TYPEBITS as u32; #[doc(hidden)] pub const DIRSHIFT: u32 = SIZESHIFT + SIZEBITS as u32; #[doc(hidden)] pub const NRMASK: u32 = (1 << NRBITS) - 1; #[doc(hidden)] pub const TYPEMASK: u32 = (1 << TYPEBITS) - 1; #[doc(hidden)] pub const SIZEMASK: u32 = (1 << SIZEBITS) - 1; #[doc(hidden)] pub const DIRMASK: u32 = (1 << DIRBITS) - 1; /// Encode an ioctl command. #[macro_export] macro_rules! ioc { ($dir:expr, $ty:expr, $nr:expr, $sz:expr) => { (($dir as u32) << $crate::DIRSHIFT) | (($ty as u32) << $crate::TYPESHIFT) | (($nr as u32) << $crate::NRSHIFT) | (($sz as u32) << $crate::SIZESHIFT) }; } /// Encode an ioctl command that has no associated data. #[macro_export] macro_rules! io { ($ty:expr, $nr:expr) => { $crate::ioc!($crate::NONE, $ty, $nr, 0) }; } /// Encode an ioctl command that reads. #[macro_export] macro_rules! ior { ($ty:expr, $nr:expr, $sz:expr) => { $crate::ioc!($crate::READ, $ty, $nr, $sz) }; } /// Encode an ioctl command that writes. #[macro_export] macro_rules! iow { ($ty:expr, $nr:expr, $sz:expr) => { $crate::ioc!($crate::WRITE, $ty, $nr, $sz) }; } /// Encode an ioctl command that both reads and writes. #[macro_export] macro_rules! iorw { ($ty:expr, $nr:expr, $sz:expr) => { $crate::ioc!($crate::READ | $crate::WRITE, $ty, $nr, $sz) }; } /// Declare a wrapper function around an ioctl. #[macro_export] macro_rules! ioctl { (bad $name:ident with $nr:expr) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, data: *mut u8) -> ::std::os::raw::c_int { $crate::ioctl(fd, $nr as ::std::os::raw::c_ulong, data) } }; (bad read $name:ident with $nr:expr; $ty:ty) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, data: *mut $ty) -> ::std::os::raw::c_int { $crate::ioctl(fd, $nr as ::std::os::raw::c_ulong, data) } }; (bad write $name:ident with $nr:expr; $ty:ty) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, data: *const $ty) -> ::std::os::raw::c_int { $crate::ioctl(fd, $nr as ::std::os::raw::c_ulong, data) } }; (none $name:ident with $ioty:expr, $nr:expr) => { pub unsafe fn $name(fd: ::std::os::raw::c_int) -> ::std::os::raw::c_int { $crate::ioctl(fd, $crate::io!($ioty, $nr) as ::std::os::raw::c_ulong) } }; (arg $name:ident with $ioty:expr, $nr:expr) => { pub unsafe fn $name( fd: ::std::os::raw::c_int, arg: ::std::os::raw::c_ulong, ) -> ::std::os::raw::c_int { $crate::ioctl(fd, $crate::io!($ioty, $nr) as ::std::os::raw::c_ulong, arg) } }; (read $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, val: *mut $ty) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::ior!($ioty, $nr, ::std::mem::size_of::<$ty>()) as ::std::os::raw::c_ulong, val, ) } }; (write $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, val: *const $ty) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::iow!($ioty, $nr, ::std::mem::size_of::<$ty>()) as ::std::os::raw::c_ulong, val, ) } }; (readwrite $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name(fd: ::std::os::raw::c_int, val: *mut $ty) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::iorw!($ioty, $nr, ::std::mem::size_of::<$ty>()) as ::std::os::raw::c_ulong, val, ) } }; (read buf $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name( fd: ::std::os::raw::c_int, val: *mut $ty, len: usize, ) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::ior!($ioty, $nr, len) as ::std::os::raw::c_ulong, val, ) } }; (write buf $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name( fd: ::std::os::raw::c_int, val: *const $ty, len: usize, ) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::iow!($ioty, $nr, len) as ::std::os::raw::c_ulong, val, ) } }; (readwrite buf $name:ident with $ioty:expr, $nr:expr; $ty:ty) => { pub unsafe fn $name( fd: ::std::os::raw::c_int, val: *const $ty, len: usize, ) -> ::std::os::raw::c_int { $crate::ioctl( fd, $crate::iorw!($ioty, $nr, len) as ::std::os::raw::c_ulong, val, ) } }; } /// Extracts the "direction" (read/write/none) from an encoded ioctl command. #[inline(always)] pub fn ioc_dir(nr: u32) -> u8 { ((nr >> DIRSHIFT) & DIRMASK) as u8 } /// Extracts the type from an encoded ioctl command. #[inline(always)] pub fn ioc_type(nr: u32) -> u32 { (nr >> TYPESHIFT) & TYPEMASK } /// Extracts the ioctl number from an encoded ioctl command. #[inline(always)] pub fn ioc_nr(nr: u32) -> u32 { (nr >> NRSHIFT) & NRMASK } /// Extracts the size from an encoded ioctl command. #[inline(always)] pub fn ioc_size(nr: u32) -> u32 { ((nr >> SIZESHIFT) as u32) & SIZEMASK } #[doc(hidden)] pub const IN: u32 = (WRITE as u32) << DIRSHIFT; #[doc(hidden)] pub const OUT: u32 = (READ as u32) << DIRSHIFT; #[doc(hidden)] pub const INOUT: u32 = ((READ | WRITE) as u32) << DIRSHIFT; #[doc(hidden)] pub const SIZE_MASK: u32 = SIZEMASK << SIZESHIFT;