POSIX AIO definitions, for BSD and Linux
Where structures included unions, I only defined the most useful member. This means that sigevents can't be delivered using SIGEV_THREAD until Rust gets better union support (SIGEV_THREAD_ID still works).
This commit is contained in:
parent
6e8c1b490c
commit
22c13e14a0
|
@ -25,6 +25,16 @@ pub type sem_t = ::c_int;
|
|||
pub enum timezone {}
|
||||
|
||||
s! {
|
||||
pub struct aiocb {
|
||||
pub aio_fildes: ::c_int,
|
||||
pub aio_offset: ::off_t,
|
||||
pub aio_buf: *mut ::c_void,
|
||||
pub aio_nybtes: ::size_t,
|
||||
pub aio_reqprio: ::c_int,
|
||||
pub aio_sigevent: sigevent,
|
||||
pub aio_lio_opcode: ::c_int
|
||||
}
|
||||
|
||||
pub struct utmpx {
|
||||
pub ut_user: [::c_char; _UTX_USERSIZE],
|
||||
pub ut_id: [::c_char; _UTX_IDSIZE],
|
||||
|
@ -303,6 +313,14 @@ s! {
|
|||
pub int_p_sign_posn: ::c_char,
|
||||
pub int_n_sign_posn: ::c_char,
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int,
|
||||
pub sigev_value: ::intptr_t, //actually a union of int and void*
|
||||
__unused1: *mut ::c_void, //actually a function pointer
|
||||
pub sigev_notify_attributes: *mut ::pthread_attr_t
|
||||
}
|
||||
}
|
||||
|
||||
pub const _UTX_USERSIZE: usize = 256;
|
||||
|
@ -1331,6 +1349,20 @@ pub const PRIO_DARWIN_NONUI: ::c_int = 0x1001;
|
|||
|
||||
pub const SEM_FAILED: *mut sem_t = -1isize as *mut ::sem_t;
|
||||
|
||||
pub const SIGEV_NONE: ::c_int = 0;
|
||||
pub const SIGEV_SIGNAL: ::c_int = 1;
|
||||
pub const SIGEV_THREAD: ::c_int = 3;
|
||||
|
||||
pub const AIO_CANCELED: ::c_int = 2;
|
||||
pub const AIO_NOTCANCELED: ::c_int = 4;
|
||||
pub const AIO_ALLDONE: ::c_int = 1;
|
||||
pub const AIO_LISTIO_MAX: ::c_int = 16;
|
||||
pub const LIO_NOP: ::c_int = 0;
|
||||
pub const LIO_WRITE: ::c_int = 2;
|
||||
pub const LIO_READ: ::c_int = 1;
|
||||
pub const LIO_WAIT: ::c_int = 2;
|
||||
pub const LIO_NOWAIT: ::c_int = 1;
|
||||
|
||||
f! {
|
||||
pub fn WSTOPSIG(status: ::c_int) -> ::c_int {
|
||||
status >> 8
|
||||
|
@ -1354,6 +1386,17 @@ f! {
|
|||
}
|
||||
|
||||
extern {
|
||||
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
|
||||
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
|
||||
pub fn aio_suspend(aiocb_list: *const *const aiocb, nitems: ::c_int,
|
||||
timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
|
||||
nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
|
||||
|
||||
pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
|
||||
|
||||
pub fn getutxent() -> *mut utmpx;
|
||||
|
|
|
@ -15,6 +15,18 @@ pub type fsblkcnt_t = u64;
|
|||
pub type fsfilcnt_t = u64;
|
||||
|
||||
s! {
|
||||
pub struct aiocb {
|
||||
pub aio_fildes: ::c_int,
|
||||
pub aio_offset: ::off_t,
|
||||
pub aio_buf: *mut ::c_void,
|
||||
pub aio_nbytes: ::size_t,
|
||||
pub aio_sigevent: sigevent,
|
||||
pub aio_lio_opcode: ::c_int,
|
||||
pub aio_reqprio: ::c_int,
|
||||
_aio_val: ::c_int,
|
||||
_aio_err: ::c_int
|
||||
}
|
||||
|
||||
pub struct dirent {
|
||||
pub d_fileno: ::ino_t,
|
||||
pub d_namlen: u16,
|
||||
|
@ -33,6 +45,15 @@ s! {
|
|||
pub node: [u8; 6],
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int, //actually a union
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
__unused1: ::c_int,
|
||||
pub sigev_value: ::intptr_t, //actually a union of int and void*
|
||||
__unused2: *mut ::c_void //actually a function pointer
|
||||
}
|
||||
|
||||
pub struct statvfs {
|
||||
pub f_bsize: ::c_ulong,
|
||||
pub f_frsize: ::c_ulong,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
pub type fflags_t = u32;
|
||||
pub type clock_t = i32;
|
||||
pub type ino_t = u32;
|
||||
pub type lwpid_t = u32;
|
||||
pub type nlink_t = u16;
|
||||
pub type blksize_t = u32;
|
||||
pub type clockid_t = ::c_int;
|
||||
|
@ -9,6 +10,22 @@ pub type fsblkcnt_t = ::uint64_t;
|
|||
pub type fsfilcnt_t = ::uint64_t;
|
||||
|
||||
s! {
|
||||
pub struct aiocb {
|
||||
pub aio_fildes: ::c_int,
|
||||
pub aio_offset: ::off_t,
|
||||
pub aio_buf: *mut ::c_void,
|
||||
pub aio_nbytes: ::size_t,
|
||||
__unused1: [::c_int; 2],
|
||||
__unused2: *mut ::c_void,
|
||||
pub aio_lio_opcode: ::c_int,
|
||||
pub aio_reqprio: ::c_int,
|
||||
// unused 3 through 5 are the __aiocb_private structure
|
||||
__unused3: ::c_long,
|
||||
__unused4: ::c_long,
|
||||
__unused5: *mut ::c_void,
|
||||
pub aio_sigevent: sigevent
|
||||
}
|
||||
|
||||
pub struct dirent {
|
||||
pub d_fileno: u32,
|
||||
pub d_reclen: u16,
|
||||
|
@ -17,6 +34,18 @@ s! {
|
|||
pub d_name: [::c_char; 256],
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int,
|
||||
pub sigev_value: ::intptr_t, //actually a union of int and void*
|
||||
//The rest of the structure is actually a union. We expose only
|
||||
//sigev_notify_thread_id because it's the most useful union member.
|
||||
pub sigev_notify_thread_id: ::lwpid_t,
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
__unused1: ::c_int,
|
||||
__unused2: [::c_long; 7]
|
||||
}
|
||||
|
||||
pub struct statvfs {
|
||||
pub f_bavail: ::fsblkcnt_t,
|
||||
pub f_bfree: ::fsblkcnt_t,
|
||||
|
@ -32,6 +61,8 @@ s! {
|
|||
}
|
||||
}
|
||||
|
||||
pub const SIGEV_THREAD_ID: ::c_int = 4;
|
||||
|
||||
pub const RAND_MAX: ::c_int = 0x7fff_fffd;
|
||||
pub const PTHREAD_STACK_MIN: ::size_t = 2048;
|
||||
pub const SIGSTKSZ: ::size_t = 34816;
|
||||
|
|
|
@ -176,6 +176,21 @@ s! {
|
|||
}
|
||||
}
|
||||
|
||||
pub const AIO_LISTIO_MAX: ::c_int = 16;
|
||||
pub const AIO_CANCELED: ::c_int = 1;
|
||||
pub const AIO_NOTCANCELED: ::c_int = 2;
|
||||
pub const AIO_ALLDONE: ::c_int = 3;
|
||||
pub const LIO_NOP: ::c_int = 0;
|
||||
pub const LIO_WRITE: ::c_int = 1;
|
||||
pub const LIO_READ: ::c_int = 2;
|
||||
pub const LIO_WAIT: ::c_int = 1;
|
||||
pub const LIO_NOWAIT: ::c_int = 0;
|
||||
|
||||
pub const SIGEV_NONE: ::c_int = 0;
|
||||
pub const SIGEV_SIGNAL: ::c_int = 1;
|
||||
pub const SIGEV_THREAD: ::c_int = 2;
|
||||
pub const SIGEV_KEVENT: ::c_int = 3;
|
||||
|
||||
pub const EMPTY: ::c_short = 0;
|
||||
pub const BOOT_TIME: ::c_short = 1;
|
||||
pub const OLD_TIME: ::c_short = 2;
|
||||
|
@ -745,6 +760,19 @@ extern {
|
|||
|
||||
#[link(name = "util")]
|
||||
extern {
|
||||
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
|
||||
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
|
||||
pub fn aio_suspend(aiocb_list: *const *const aiocb, nitems: ::c_int,
|
||||
timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
|
||||
nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
|
||||
pub fn aio_waitcomplete(iocbp: *mut *mut aiocb,
|
||||
timeout: *mut ::timespec) -> ::ssize_t;
|
||||
|
||||
pub fn getnameinfo(sa: *const ::sockaddr,
|
||||
salen: ::socklen_t,
|
||||
host: *mut ::c_char,
|
||||
|
|
|
@ -6,6 +6,19 @@ pub type fsblkcnt_t = ::uint64_t;
|
|||
pub type fsfilcnt_t = ::uint64_t;
|
||||
|
||||
s! {
|
||||
pub struct aiocb {
|
||||
pub aio_offset: ::off_t,
|
||||
pub aio_buf: *mut ::c_void,
|
||||
pub aio_nbytes: ::size_t,
|
||||
pub aio_fildes: ::c_int,
|
||||
pub aio_lio_opcode: ::c_int,
|
||||
pub aio_reqprio: ::c_int,
|
||||
pub aio_sigevent: ::sigevent,
|
||||
_state: ::c_int,
|
||||
_errno: ::c_int,
|
||||
_retval: ::ssize_t
|
||||
}
|
||||
|
||||
pub struct dirent {
|
||||
pub d_fileno: ::ino_t,
|
||||
pub d_reclen: u16,
|
||||
|
@ -30,6 +43,14 @@ s! {
|
|||
__unused8: *mut ::c_void,
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_notify: ::c_int,
|
||||
pub sigev_signo: ::c_int,
|
||||
pub sigev_value: ::intptr_t, //actually a union of int and void*
|
||||
__unused1: *mut ::c_void, //actually a function pointer
|
||||
pub sigev_notify_attributes: *mut ::c_void
|
||||
}
|
||||
|
||||
pub struct sigset_t {
|
||||
__bits: [u32; 4],
|
||||
}
|
||||
|
@ -549,7 +570,32 @@ pub const KERN_PROC_RGID: ::c_int = 8;
|
|||
|
||||
pub const EAI_SYSTEM: ::c_int = 11;
|
||||
|
||||
pub const AIO_LISTIO_MAX: ::c_int = 512;
|
||||
pub const AIO_CANCELED: ::c_int = 1;
|
||||
pub const AIO_NOTCANCELED: ::c_int = 2;
|
||||
pub const AIO_ALLDONE: ::c_int = 3;
|
||||
pub const LIO_NOP: ::c_int = 0;
|
||||
pub const LIO_WRITE: ::c_int = 1;
|
||||
pub const LIO_READ: ::c_int = 2;
|
||||
pub const LIO_WAIT: ::c_int = 1;
|
||||
pub const LIO_NOWAIT: ::c_int = 0;
|
||||
|
||||
pub const SIGEV_NONE: ::c_int = 0;
|
||||
pub const SIGEV_SIGNAL: ::c_int = 1;
|
||||
pub const SIGEV_THREAD: ::c_int = 2;
|
||||
|
||||
extern {
|
||||
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
|
||||
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
|
||||
pub fn aio_suspend(aiocb_list: *const *const aiocb, nitems: ::c_int,
|
||||
timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
|
||||
nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
|
||||
|
||||
pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
|
||||
pub fn getnameinfo(sa: *const ::sockaddr,
|
||||
salen: ::socklen_t,
|
||||
|
|
|
@ -163,6 +163,35 @@ s! {
|
|||
pub int_p_sign_posn: ::c_char,
|
||||
pub int_n_sign_posn: ::c_char,
|
||||
}
|
||||
|
||||
pub struct sigevent {
|
||||
pub sigev_value: ::intptr_t, //actually a union of int and void*
|
||||
pub sigev_signo: ::c_int,
|
||||
pub sigev_notify: ::c_int,
|
||||
// Actually a union. We only expose _tid because it's the most useful
|
||||
// member
|
||||
pub _tid: ::c_int,
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
__unused1: [::c_int; 11],
|
||||
#[cfg(target_pointer_width = "32")]
|
||||
__unused1: [::c_int; 12]
|
||||
}
|
||||
|
||||
pub struct aiocb {
|
||||
pub aio_fildes: ::c_int,
|
||||
pub aio_lio_opcode: ::c_int,
|
||||
pub aio_reqprio: ::c_int,
|
||||
pub aio_buf: *mut ::c_void,
|
||||
pub aio_nbytes: ::size_t,
|
||||
pub aio_sigevent: sigevent,
|
||||
__next_prio: *mut aiocb,
|
||||
__abs_prio: ::c_int,
|
||||
__policy: ::c_int,
|
||||
__error_code: ::c_int,
|
||||
__return_value: ::ssize_t,
|
||||
pub aio_offset: off_t,
|
||||
__glibc_reserved: [::c_char; 32]
|
||||
}
|
||||
}
|
||||
|
||||
// intentionally not public, only used for fd_set
|
||||
|
@ -632,6 +661,20 @@ pub const PIPE_BUF: usize = 4096;
|
|||
|
||||
pub const SI_LOAD_SHIFT: ::c_uint = 16;
|
||||
|
||||
pub const SIGEV_SIGNAL: ::c_int = 0;
|
||||
pub const SIGEV_NONE: ::c_int = 1;
|
||||
pub const SIGEV_THREAD: ::c_int = 2;
|
||||
pub const SIGEV_THREAD_ID: ::c_int = 4;
|
||||
|
||||
pub const AIO_CANCELED: ::c_int = 0;
|
||||
pub const AIO_NOTCANCELED: ::c_int = 1;
|
||||
pub const AIO_ALLDONE: ::c_int = 2;
|
||||
pub const LIO_READ: ::c_int = 0;
|
||||
pub const LIO_WRITE: ::c_int = 1;
|
||||
pub const LIO_NOP: ::c_int = 2;
|
||||
pub const LIO_WAIT: ::c_int = 0;
|
||||
pub const LIO_NOWAIT: ::c_int = 1;
|
||||
|
||||
f! {
|
||||
pub fn FD_CLR(fd: ::c_int, set: *mut fd_set) -> () {
|
||||
let fd = fd as usize;
|
||||
|
@ -689,6 +732,17 @@ f! {
|
|||
}
|
||||
|
||||
extern {
|
||||
pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
|
||||
pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
|
||||
pub fn aio_suspend(aiocb_list: *const *const aiocb, nitems: ::c_int,
|
||||
timeout: *const ::timespec) -> ::c_int;
|
||||
pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
|
||||
pub fn lio_listio(mode: ::c_int, aiocb_list: *const *mut aiocb,
|
||||
nitems: ::c_int, sevp: *mut sigevent) -> ::c_int;
|
||||
|
||||
pub fn getpwnam_r(name: *const ::c_char,
|
||||
pwd: *mut passwd,
|
||||
buf: *mut ::c_char,
|
||||
|
|
Loading…
Reference in New Issue