49#if !defined(__RLIB_H_INCLUDE_GUARD__) && !defined(RLIB_COMPILATION)
50#error "#include <rlib.h> only please."
57#if defined(__BIONIC__) && defined (RLIB_HAVE_ALLOCA_H)
59#elif defined(__GNUC__)
61#define alloca(size) __builtin_alloca (size)
62#elif defined(RLIB_HAVE_ALLOCA_H)
64#elif defined(_MSC_VER) || defined(__DMC__)
103#define r_alloca(size) alloca (size)
106#define r_alloca0(size) r_memclear (r_alloca (size), size)
109#define r_mem_newa_n(type, n) ((type*) r_alloca (sizeof (type) * (rsize) (n)))
112#define r_mem_newa0_n(type, n) ((type*) r_alloca0 (sizeof (type) * (rsize) (n)))
115#define r_mem_newa(type) r_mem_newa_n (type, 1)
118#define r_mem_newa0(type) r_mem_newa0_n (type, 1)
184#define r_mem_new_n(type, n) ((type*) r_malloc (sizeof (type) * (rsize) (n)))
187#define r_mem_new0_n(type, n) ((type*) r_malloc0 (sizeof (type) * (rsize) (n)))
190#define r_mem_new(type) r_mem_new_n (type, 1)
193#define r_mem_new0(type) r_mem_new0_n (type, 1)
#define R_ATTR_WARN_UNUSED_RESULT
Warn if a function's return value is ignored.
Definition rmacros.h:278
#define R_ATTR_NULL_TERMINATED
Mark a variadic function as requiring a NULL sentinel.
Definition rmacros.h:336
#define R_API
Public-API decoration: resolves to R_API_EXPORT while building rlib and R_API_IMPORT for consumers.
Definition rmacros.h:115
#define R_BEGIN_DECLS
Open an extern "C" block under C++ (no-op in C).
Definition rmacros.h:196
rpointer r_memdup(rconstpointer src, rsize size)
Heap-allocate a copy of size bytes at src.
void r_memclear_secure(rpointer ptr, rsize size)
Zero size bytes at ptr in a way the compiler can't elide.
rpointer r_malloc(rsize size) R_ATTR_ALLOC_SIZE_ARG(1)
Allocate size uninitialised bytes on the heap.
void r_mem_set_vtable(RMemVTable *vtable)
Replace the active allocator vtable.
RMemScanResultType
Status codes returned by r_mem_scan_pattern.
Definition rmem.h:442
RMemScanResultType r_mem_scan_pattern(rconstpointer mem, rsize size, const rchar *pattern, RMemScanResult **result)
Find the first match for pattern in mem, returning full per-token detail.
rpointer rpointer r_realloc(rpointer ptr, rsize size) R_ATTR_WARN_UNUSED_RESULT
Resize an existing allocation to size bytes.
rpointer r_mem_scan_byte(rconstpointer mem, rsize size, ruint8 byte)
Find the first occurrence of byte byte in mem.
rpointer r_memdup_agg(rsize *out,...)
Aggregate a NULL-terminated list of byte chunks into a freshly-allocated buffer.
rpointer r_memdup_aggv(rsize *out, va_list args)
va_list variant of r_memdup_agg.
RMemTokenType
Token classes produced by the r_mem_scan_pattern parser.
Definition rmem.h:431
void r_free(rpointer ptr)
Release a heap allocation obtained from r_malloc / r_malloc0 / r_calloc / r_realloc.
rpointer r_malloc0(rsize size) R_ATTR_ALLOC_SIZE_ARG(1)
Allocate size zero-initialised bytes on the heap.
rpointer r_mem_scan_simple_pattern(rconstpointer mem, rsize size, const rchar *pattern, rpointer *end)
Find the first match for pattern in mem (simple form).
rpointer r_calloc(rsize count, rsize size) R_ATTR_ALLOC_SIZE_ARGS(1
Allocate count zero-initialised elements of size bytes.
rpointer r_mem_scan_data(rconstpointer mem, rsize size, rconstpointer data, rsize datasize)
Find the first occurrence of datasize-byte sequence data within mem.
rpointer r_mem_scan_byte_any(rconstpointer mem, rsize size, const ruint8 *byte, rsize bytes)
Find the first byte in mem that matches any byte in the byte set.
int r_memcmp_ct(rconstpointer a, rconstpointer b, rsize size)
Constant-time variant of r_memcmp.
rsize r_memagg(rpointer dst, rsize size, rsize *out,...)
Aggregate (concatenate) a NULL-terminated list of byte chunks into dst.
rboolean r_mem_using_system_default(void)
Whether the active vtable still points at libc.
rsize r_memaggv(rpointer dst, rsize size, rsize *out, va_list args)
va_list variant of r_memagg.
void r_mem_get_vtable(RMemVTable *out)
Copy the active vtable into *out.
@ R_MEM_SCAN_RESULT_INVAL
Definition rmem.h:443
@ R_MEM_SCAN_RESULT_OOM
Definition rmem.h:444
@ R_MEM_SCAN_RESULT_PATTERN_NOT_IMPL
Definition rmem.h:446
@ R_MEM_SCAN_RESULT_INVALID_PATTERN
Definition rmem.h:445
@ R_MEM_SCAN_RESULT_NOT_FOUND
Definition rmem.h:448
@ R_MEM_SCAN_RESULT_OK
Definition rmem.h:447
@ R_MEM_TOKEN_BYTES
Definition rmem.h:433
@ R_MEM_TOKEN_NONE
Definition rmem.h:432
@ R_MEM_TOKEN_WILDCARD
Definition rmem.h:434
@ R_MEM_TOKEN_WILDCARD_SIZED
Definition rmem.h:435
char rchar
Default character type (char).
Definition rtypes.h:137
int rboolean
Boolean type (typedef'd to int).
Definition rtypes.h:59
void * rpointer
Generic pointer (alias for void *).
Definition rtypes.h:327
unsigned char ruint8
Unsigned 8-bit integer.
Definition rtypes.h:190
const void * rconstpointer
Generic const pointer (alias for const void *).
Definition rtypes.h:329
unsigned long rsize
Unsigned pointer-sized size type (like size_t).
Definition rtypes.h:290
Foundational type aliases used by every rlib header.
Pointer + length view of a memory region.
Definition rmem.h:84
rsize size
Definition rmem.h:86
ruint8 * data
Definition rmem.h:85
Result of a successful r_mem_scan_pattern call.
Definition rmem.h:475
RMemScanToken token[0]
Definition rmem.h:479
rsize tokens
Definition rmem.h:478
rpointer end
Definition rmem.h:477
rpointer ptr
Definition rmem.h:476
One token of a parsed scan pattern.
Definition rmem.h:458
const rchar * pattern
Definition rmem.h:460
RMemChunk chunk
Definition rmem.h:461
RMemTokenType type
Definition rmem.h:459
Allocator backend slots routed through by every rlib heap helper.
Definition rmem.h:208