diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/alloc.h | 18 | ||||
-rw-r--r-- | include/err.h | 22 | ||||
-rw-r--r-- | include/mem.h | 171 | ||||
-rw-r--r-- | include/meson.build | 1 |
4 files changed, 46 insertions, 166 deletions
diff --git a/include/alloc.h b/include/alloc.h index 6877f61..139b027 100644 --- a/include/alloc.h +++ b/include/alloc.h @@ -16,22 +16,8 @@ struct calt_alloc { extern struct calt_alloc calt_get_alloc(void); extern void calt_use_custom_alloc(struct calt_alloc allocator); - -inline void *calt_malloc(size_t size) { - if (size) { - struct calt_alloc alloc = calt_get_alloc(); - return alloc.malloc ? alloc.malloc(size) : NULL; - } else { - return NULL; - } -} - -inline void calt_free(void *ptr) { - if (ptr) { - calt_get_alloc().free(ptr); - } -} - +extern void *calt_malloc(size_t size); +extern void calt_free(void *ptr); extern void *calt_calloc(size_t size); extern void *calt_realloc(void *ptr, size_t size); extern void *calt_memdup(void const *restrict src, size_t len); diff --git a/include/err.h b/include/err.h new file mode 100644 index 0000000..ba9191c --- /dev/null +++ b/include/err.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Marc Pervaz Boocha + * + * SPDX-License-Identifier: MIT + */ +#ifndef CALT_ERR_H +#define CALT_ERR_H + +enum calt_err { + CALT_OK = 0, + CALT_ERR_UNKNOWN = 1, + CALT_ERR_NULL = 2, + CALT_ERR_OP_NOT_IMPLEMENTED = 3, + CALT_ERR_OOM = 4, + CALT_ERR_INVALID_ARGUEMENT = 5, +}; + + +extern void calt_set_err(enum calt_err *err, enum calt_err code); +extern char* calt_errstr(enum calt_err err); + +#endif diff --git a/include/mem.h b/include/mem.h index b18822c..4136c76 100644 --- a/include/mem.h +++ b/include/mem.h @@ -7,159 +7,30 @@ #define CALT_MEM_H #include <stddef.h> -inline void *calt_memset(void *restrict dest, unsigned char value, size_t count) { - unsigned char *p = dest; - while (count-- > 0) { - *p++ = value; - } - - return dest; -} - -inline void *calt_memset_null(void *dest, unsigned char value, size_t count) { - return dest ? calt_memset(dest, value, count) : NULL; -} - -inline void *calt_memzero(void *dest, size_t count) { - return calt_memset(dest, '\0', count); -} - -inline void *calt_memzero_null(void *dest, size_t count) { - return dest ? calt_memzero(dest, count) : NULL; -} - -inline void *calt_memcpy(void *restrict dest, const void *restrict src, - size_t count) { - unsigned char *d = dest; - unsigned char const *s = src; - - while (count-- > 0) { - *d++ = *s++; - } - - return dest; -} - - -inline void *calt_memcpy_null(void *restrict dest, void const *restrict src, - size_t count) { - return dest ? calt_memcpy(dest, src, count) : NULL; -} +extern void *calt_memset(void *dest, unsigned char value, size_t count); +extern void *calt_memset_null(void *dest, unsigned char value, size_t count); +extern void *calt_memzero(void *restrict dest, size_t count); +extern void *calt_memzero_null(void *restrict dest, size_t count); +extern void *calt_memcpy(void *restrict dest, void const *restrict src, + size_t count); +extern void *calt_memcpy_null(void *restrict dest, void const *restrict src, + size_t count); extern void *calt_memccpy(void *restrict dest, void const *restrict src, unsigned char value, size_t count); -inline void *calt_memccpy_null(void *restrict dest, void const *restrict src, - unsigned char value, size_t count) { - return dest ? calt_memccpy(dest, src, value, count) : NULL; -} - -inline void *calt_memmove(void *dest, void const *src, size_t count) { - unsigned char *d = dest; - unsigned char const *s = src; - - if (d > s) { - d += count; - s += count; - while (count-- > 0) { - *--d = *--s; - } - } else if (d < s) { - calt_memcpy(dest, src, count); - } - - return dest; -} - -inline void *calt_memmove_null(void *dest, void const *src, size_t count) { - return dest ? calt_memmove(dest, src, count) : NULL; -} - -inline void *calt_memchr(void const *ptr, unsigned char value, size_t count) { - unsigned char const *p = ptr; - - while (count-- > 0) { - if (*p == value) { - return (void *)p; - } - p++; - } - - return NULL; -} - -inline void *calt_memrchr(void const *ptr, unsigned char value, size_t count) { - unsigned char const *p = ptr; - p = p + count; - - while (count > 0) { - if (*(--p) == value) { - return (void *)p; - } - } - - return NULL; -} - -inline int calt_memcmp(const void *ptr1, const void *ptr2, size_t count) { - const unsigned char *p1 = ptr1; - const unsigned char *p2 = ptr2; - - while (count-- > 0) { - if (*p1 != *p2) { - return (*p1 < *p2) ? -1 : 1; - } - p1++; - p2++; - } - - return 0; -} - -inline void calt_memswap(void *restrict ptr1, void *restrict ptr2, size_t size) { - unsigned char *p1 = ptr1; - unsigned char *p2 = ptr2; - while (size-- > 0) { - unsigned char temp = *p1; - *p1++ = *p2; - *p2++ = temp; - } -} - -inline size_t calt_memlen(void const* ptr, unsigned char value, size_t size) { - unsigned char const *p = ptr; - size_t len = 0; - - while (size-- > 0 && *p != value) { - p++; - len++; - } - - return len; -} - +extern void *calt_memccpy_null(void *restrict dest, void const *restrict src, + unsigned char value, size_t count); +extern void *calt_memmove(void *dest, void const *src, size_t count); +extern void *calt_memmove_null(void *dest, void const *src, size_t count); +extern void *calt_memchr(void const *ptr, unsigned char value, size_t count); +extern void *calt_memrchr(void const *ptr, unsigned char value, size_t count); +extern void *calt_memrchr(void const *ptr, unsigned char value, size_t count); +extern int calt_memcmp(void const *ptr1, void const *ptr2, size_t count); +extern void calt_memswap(void *restrict ptr1, void *restrict ptr2, size_t size); +extern size_t calt_memlen(void const *ptr, unsigned char value, size_t count); extern size_t calt_memhash(void const *ptr, size_t count); - -inline void *calt_memmem(void const *haystack, size_t haystacklen, - void const *needle, size_t needlelen) { - unsigned char const *p = haystack; - unsigned char const *end = p + haystacklen - needlelen; - while (p <= end) { - if (calt_memcmp(p, needle, needlelen) == 0) { - return (void *)p; - } - p++; - } - return NULL; -} - -inline void calt_memrev(void *ptr, size_t size) { - unsigned char *p1 = ptr; - unsigned char *p2 = p1 + size - 1; - while (p1 < p2) { - unsigned char temp = *p1; - *p1++ = *p2; - *p2-- = temp; - } -} +extern void *calt_memmem(void const *haystack, size_t haystacklen, + void const *needle, size_t needlelen); +extern void *calt_memrev(void *ptr, size_t size); #endif diff --git a/include/meson.build b/include/meson.build index 403f666..08f2234 100644 --- a/include/meson.build +++ b/include/meson.build @@ -1,5 +1,6 @@ header = files([ 'calt.h', + 'err.h', 'mem.h', 'alloc.h' ]) |