pmem_sys/
lib.rs

1//! # FFI bindings to **libpmem**
2//!
3//! The **libpmem** library provides low level persistent memory support.
4//! The libraries above are implemented using **libpmem**.
5//! Developers wishing to roll their own persistent memory algorithms will find this library useful,
6//! but most developers will likely use **libpmemobj** and let that library call **libpmem** for them.
7//!
8//! > This is **not** an official port of the NVM Library.
9//! >
10//! > The official **libpmem** documentation can be found at: [http://pmem.io/nvml/libpmem/](http://pmem.io/nvml/libpmem/)
11
12extern crate libc;
13
14use ::libc::{size_t, mode_t};
15use ::libc::{c_void, c_char, c_int, c_uint};
16
17#[allow(dead_code)]
18#[link(name = "pmem")]
19extern "C" {
20    // Most commonly used functions:
21
22    pub fn pmem_is_pmem(addr: *const c_void, len: size_t) -> c_int;
23    pub fn pmem_persist(addr: *const c_void, len: size_t);
24    pub fn pmem_msync(addr: *const c_void, len: size_t) -> c_int;
25    pub fn pmem_map_file(path: *const c_char,
26                         len: size_t,
27                         flags: c_int,
28                         mode: mode_t,
29                         mapped_lenp: *mut size_t,
30                         is_pmemp: *mut c_int) -> *mut c_void;
31    pub fn pmem_unmap(addr: *mut c_void, len: size_t) -> c_int;
32
33    // Partial flushing operations:
34
35    pub fn pmem_flush(addr: *const c_void, len: size_t);
36    pub fn pmem_drain();
37    pub fn pmem_has_hw_drain() -> c_int;
38
39    // Copying to persistent memory:
40
41    pub fn pmem_memmove_persist(pmemdest: *mut c_void, src: *const c_void, len: size_t) -> *mut c_void;
42    pub fn pmem_memcpy_persist(pmemdest: *mut c_void, src: *const c_void, len: size_t) -> *mut c_void;
43    pub fn pmem_memset_persist(pmemdest: *mut c_void, c: c_int, len: size_t) -> *mut c_void;
44    pub fn pmem_memmove_nodrain(pmemdest: *mut c_void, src: *const c_void, len: size_t) -> *mut c_void;
45    pub fn pmem_memcpy_nodrain(pmemdest: *mut c_void, src: *const c_void, len: size_t) -> *mut c_void;
46    pub fn pmem_memset_nodrain(pmemdest: *mut c_void, c: c_int, len: size_t) -> *mut c_void;
47
48    // Library API versioning:
49
50    pub fn pmem_check_version(major_required: c_uint, minor_required: c_uint) -> *const c_char;
51
52    // Error handling:
53
54    pub fn pmem_errormsg() -> *const c_char;
55}