Source code

Revision control

Copy as Markdown

Other Tools

//! Header: `stdlib.h`
use super::*;
use crate::prelude::*;
// Exit status constants
pub const EXIT_SUCCESS: c_int = 0;
pub const EXIT_FAILURE: c_int = 1;
// Maximum values
pub const RAND_MAX: c_int = 32767;
extern "C" {
// Memory management
pub fn malloc(size: size_t) -> *mut c_void;
pub fn calloc(nmemb: size_t, size: size_t) -> *mut c_void;
pub fn realloc(ptr: *mut c_void, size: size_t) -> *mut c_void;
pub fn free(ptr: *mut c_void);
// Process control
pub fn abort() -> !;
pub fn exit(status: c_int) -> !;
pub fn atexit(function: extern "C" fn()) -> c_int;
// Environment
pub fn getenv(name: *const c_char) -> *mut c_char;
pub fn setenv(name: *const c_char, value: *const c_char, overwrite: c_int) -> c_int;
pub fn unsetenv(name: *const c_char) -> c_int;
// String/number conversion
pub fn atoi(nptr: *const c_char) -> c_int;
pub fn atol(nptr: *const c_char) -> c_long;
pub fn atoll(nptr: *const c_char) -> c_longlong;
pub fn strtol(nptr: *const c_char, endptr: *mut *mut c_char, base: c_int) -> c_long;
pub fn strtoul(nptr: *const c_char, endptr: *mut *mut c_char, base: c_int) -> c_ulong;
pub fn strtoll(nptr: *const c_char, endptr: *mut *mut c_char, base: c_int) -> c_longlong;
pub fn strtoull(nptr: *const c_char, endptr: *mut *mut c_char, base: c_int) -> c_ulonglong;
pub fn strtod(nptr: *const c_char, endptr: *mut *mut c_char) -> c_double;
pub fn strtof(nptr: *const c_char, endptr: *mut *mut c_char) -> c_float;
// Random numbers
pub fn rand() -> c_int;
pub fn srand(seed: c_uint);
// Searching and sorting
pub fn qsort(
base: *mut c_void,
nmemb: size_t,
size: size_t,
compar: extern "C" fn(*const c_void, *const c_void) -> c_int,
);
pub fn bsearch(
key: *const c_void,
base: *const c_void,
nmemb: size_t,
size: size_t,
compar: extern "C" fn(*const c_void, *const c_void) -> c_int,
) -> *mut c_void;
// Integer arithmetic
pub fn abs(j: c_int) -> c_int;
pub fn labs(j: c_long) -> c_long;
pub fn llabs(j: c_longlong) -> c_longlong;
pub fn div(numer: c_int, denom: c_int) -> div_t;
pub fn ldiv(numer: c_long, denom: c_long) -> ldiv_t;
pub fn lldiv(numer: c_longlong, denom: c_longlong) -> lldiv_t;
}