33#define CORE_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
34#define CORE_MIN(a, b) ((a) < (b) ? (a) : (b))
35#define CORE_MAX(a, b) ((a) > (b) ? (a) : (b))
36#define CORE_CLAMP(v, lo, hi) ((v) < (lo) ? (lo) : ((v) > (hi) ? (hi) : (v)))
39#define CORE_PATH_MAX 256
46 void *(*alloc_large)(
size_t size);
47 void *(*alloc_fast)(
size_t size);
48 void *(*realloc_large)(
void *ptr,
size_t size);
49 void (*free)(
void *ptr);
68 __attribute__((format(printf, 3, 4)))
71#define CORE_LOGE(tag, ...) core_log(CORE_LOG_ERROR, tag, __VA_ARGS__)
72#define CORE_LOGW(tag, ...) core_log(CORE_LOG_WARN, tag, __VA_ARGS__)
73#define CORE_LOGI(tag, ...) core_log(CORE_LOG_INFO, tag, __VA_ARGS__)
74#define CORE_LOGD(tag, ...) core_log(CORE_LOG_DEBUG, tag, __VA_ARGS__)
82 void *(*create)(void);
83 void (*lock)(
void *m);
84 void (*unlock)(
void *m);
85 void (*destroy)(
void *m);
111int core_path_join(
char *out,
size_t out_size,
const char *dir,
const char *name);
void core_set_allocator(const core_allocator_t *a)
NULL restores stdlib defaults.
bool core_str_ends_with_ci(const char *s, const char *suffix)
ASCII case-insensitive.
void core_mutex_destroy(core_mutex_t *m)
void core_log(core_log_level_t level, const char *tag, const char *fmt,...)
void core_mutex_lock(core_mutex_t *m)
uint32_t(* core_clock_fn_t)(void)
Time. Monotonic milliseconds, installed by the platform (default: clock()).
Definition base.h:98
char * core_strdup(const char *s)
const char * core_path_ext(const char *path)
pointer after last '.', "" if none
void * core_malloc_fast(size_t size)
fast (internal RAM on device)
void core_mutex_unlock(core_mutex_t *m)
void core_set_lock_ops(const core_lock_ops_t *ops)
NULL restores no-op.
const char * core_err_name(int err)
void core_free(void *ptr)
void core_set_clock(core_clock_fn_t fn)
void core_path_dirname(const char *path, char *out, size_t out_size)
void core_set_log_sink(core_log_sink_t sink, core_log_level_t max_level)
size_t core_strlcpy(char *dst, const char *src, size_t size)
Small string helpers (UTF-8 safe where noted).
struct core_mutex core_mutex_t
Definition base.h:89
int core_path_join(char *out, size_t out_size, const char *dir, const char *name)
void(* core_log_sink_t)(core_log_level_t level, const char *tag, const char *msg)
Definition base.h:64
void * core_malloc(size_t size)
large (PSRAM on device)
core_log_level_t
Logging. The platform installs a sink; default prints to stderr.
Definition base.h:63
@ CORE_LOG_INFO
Definition base.h:63
@ CORE_LOG_WARN
Definition base.h:63
@ CORE_LOG_DEBUG
Definition base.h:63
@ CORE_LOG_ERROR
Definition base.h:63
size_t core_strlcat(char *dst, const char *src, size_t size)
const char * core_path_basename(const char *path)
void * core_calloc(size_t n, size_t size)
large, zeroed
core_mutex_t * core_mutex_create(void)
uint32_t core_now_ms(void)
core_err_t
Errors. Functions return 0 (CORE_OK) or a negative code.
Definition base.h:18
@ CORE_EUNSUPPORTED
format or feature not supported
Definition base.h:25
@ CORE_ECORRUPT
malformed data
Definition base.h:28
@ CORE_ENOTFOUND
Definition base.h:27
@ CORE_EAGAIN
try again later (non-blocking)
Definition base.h:26
@ CORE_EIO
Definition base.h:24
@ CORE_EOF
end of stream
Definition base.h:21
@ CORE_EINVAL
Definition base.h:23
@ CORE_OK
Definition base.h:19
@ CORE_ENOMEM
Definition base.h:22
@ CORE_ERR
generic failure
Definition base.h:20
void * core_realloc(void *ptr, size_t size)
large
Memory.
Definition base.h:45
Locks.
Definition base.h:81