Source code
Revision control
Copy as Markdown
Other Tools
//! This file contains the BSD APIs available in Haiku. It corresponds to the
//! header files in `headers/compatibility/bsd`.
//!
//! Note that Haiku's BSD compatibility is a combination of system APIs and
//! utility libraries. There should only be system APIs in `libc`. When you are
//! trying to determine whether something should be included in this file, the
//! best indicator is whether it also exists in the BSD-specific definitions in
//! this libc crate.
use crate::prelude::*;
// stringlist.h (utility library)
// Note: this is kept because it was previously introduced
pub type StringList = _stringlist;
s! {
// stringlist.h (utility library)
// Note: this is kept because it was previously introduced
pub struct _stringlist {
pub sl_str: *mut *mut c_char,
pub sl_max: size_t,
pub sl_cur: size_t,
}
// sys/event.h
pub struct kevent {
pub ident: crate::uintptr_t,
pub filter: c_short,
pub flags: c_ushort,
pub fflags: c_uint,
pub data: i64,
pub udata: *mut c_void,
pub ext: [u64; 4],
}
// sys/link_elf.h
pub struct dl_phdr_info {
pub dlpi_addr: crate::Elf_Addr,
pub dlpi_name: *const c_char,
pub dlpi_phdr: *const crate::Elf_Phdr,
pub dlpi_phnum: crate::Elf_Half,
}
}
// sys/event.h
pub const EVFILT_READ: i16 = -1;
pub const EVFILT_WRITE: i16 = -2;
pub const EVFILT_PROC: i16 = -5;
pub const EV_ADD: u16 = 0x0001;
pub const EV_DELETE: u16 = 0x0002;
pub const EV_ONESHOT: u16 = 0x0010;
pub const EV_CLEAR: u16 = 0x0020;
pub const EV_EOF: u16 = 0x8000;
pub const EV_ERROR: u16 = 0x4000;
pub const NOTE_EXIT: u32 = 0x80000000;
// sys/ioccom.h
pub const IOC_VOID: c_ulong = 0x20000000;
pub const IOC_OUT: c_ulong = 0x40000000;
pub const IOC_IN: c_ulong = 0x80000000;
pub const IOC_INOUT: c_ulong = IOC_IN | IOC_OUT;
pub const IOC_DIRMASK: c_ulong = 0xe0000000;
#[link(name = "bsd")]
extern "C" {
// stdlib.h
pub fn daemon(nochdir: c_int, noclose: c_int) -> c_int;
pub fn getprogname() -> *const c_char;
pub fn setprogname(progname: *const c_char);
pub fn arc4random() -> u32;
pub fn arc4random_uniform(upper_bound: u32) -> u32;
pub fn arc4random_buf(buf: *mut c_void, n: size_t);
pub fn mkstemps(template: *mut c_char, suffixlen: c_int) -> c_int;
pub fn strtonum(
nptr: *const c_char,
minval: c_longlong,
maxval: c_longlong,
errstr: *mut *const c_char,
) -> c_longlong;
// pty.h
pub fn openpty(
amaster: *mut c_int,
aslave: *mut c_int,
name: *mut c_char,
termp: *mut crate::termios,
winp: *mut crate::winsize,
) -> c_int;
pub fn login_tty(_fd: c_int) -> c_int;
pub fn forkpty(
amaster: *mut c_int,
name: *mut c_char,
termp: *mut crate::termios,
winp: *mut crate::winsize,
) -> crate::pid_t;
// string.h
pub fn strsep(string: *mut *mut c_char, delimiters: *const c_char) -> *mut c_char;
pub fn explicit_bzero(buf: *mut c_void, len: size_t);
// stringlist.h (utility library)
// Note: this is kept because it was previously introduced
pub fn sl_init() -> *mut StringList;
pub fn sl_add(sl: *mut StringList, n: *mut c_char) -> c_int;
pub fn sl_free(sl: *mut StringList, i: c_int);
pub fn sl_find(sl: *mut StringList, n: *mut c_char) -> *mut c_char;
// sys/event.h
pub fn kqueue() -> c_int;
pub fn kevent(
kq: c_int,
changelist: *const kevent,
nchanges: c_int,
eventlist: *mut kevent,
nevents: c_int,
timeout: *const crate::timespec,
) -> c_int;
// sys/link_elf.h
pub fn dl_iterate_phdr(
callback: Option<
unsafe extern "C" fn(info: *mut dl_phdr_info, size: usize, data: *mut c_void) -> c_int,
>,
data: *mut c_void,
) -> c_int;
// sys/time.h
pub fn lutimes(file: *const c_char, times: *const crate::timeval) -> c_int;
// sys/uov.h
pub fn preadv(
fd: c_int,
iov: *const crate::iovec,
iovcnt: c_int,
offset: crate::off_t,
) -> ssize_t;
pub fn pwritev(
fd: c_int,
iov: *const crate::iovec,
iovcnt: c_int,
offset: crate::off_t,
) -> ssize_t;
// sys/wait.h
pub fn wait4(
pid: crate::pid_t,
status: *mut c_int,
options: c_int,
rusage: *mut crate::rusage,
) -> crate::pid_t;
}