Skip to main content

pyforge_ffi/cpython/
pymem.rs

1use libc::size_t;
2use std::ffi::c_void;
3
4extern_libpython! {
5    pub fn PyMem_RawMalloc(size: size_t) -> *mut c_void;
6    pub fn PyMem_RawCalloc(nelem: size_t, elsize: size_t) -> *mut c_void;
7    pub fn PyMem_RawRealloc(ptr: *mut c_void, new_size: size_t) -> *mut c_void;
8    pub fn PyMem_RawFree(ptr: *mut c_void);
9
10    // skipped _PyMem_GetCurrentAllocatorName
11    // skipped _PyMem_RawStrdup
12    // skipped _PyMem_Strdup
13    // skipped _PyMem_RawWcsdup
14}
15
16#[repr(C)]
17#[derive(Copy, Clone)]
18pub enum PyMemAllocatorDomain {
19    PYMEM_DOMAIN_RAW,
20    PYMEM_DOMAIN_MEM,
21    PYMEM_DOMAIN_OBJ,
22}
23
24// skipped PyMemAllocatorName
25
26#[repr(C)]
27#[derive(Copy, Clone)]
28pub struct PyMemAllocatorEx {
29    pub ctx: *mut c_void,
30    pub malloc: Option<extern "C" fn(ctx: *mut c_void, size: size_t) -> *mut c_void>,
31    pub calloc:
32        Option<extern "C" fn(ctx: *mut c_void, nelem: size_t, elsize: size_t) -> *mut c_void>,
33    pub realloc:
34        Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void, new_size: size_t) -> *mut c_void>,
35    pub free: Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void)>,
36}
37
38extern_libpython! {
39    
40    pub fn PyMem_GetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx);
41    
42    pub fn PyMem_SetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx);
43    
44    pub fn PyMem_SetupDebugHooks();
45}