From 644130802a51d91b90e85a0769f642c3e0203aef Mon Sep 17 00:00:00 2001 From: Mosder Date: Wed, 16 Sep 2026 23:47:49 +0200 Subject: feat: added a simple compatibbility layer for functions not from C99 standard --- compat/compat.c | 31 +++++++++++++++++++++++++++++++ compat/compat.h | 21 +++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 compat/compat.c create mode 100644 compat/compat.h (limited to 'compat') diff --git a/compat/compat.c b/compat/compat.c new file mode 100644 index 0000000..1112146 --- /dev/null +++ b/compat/compat.c @@ -0,0 +1,31 @@ +#include "compat.h" + +#ifdef NO_STRDUP +#include "moslib/safe.h" +#include +char *strdup(const char *s) { + char *s2 = mos_safe_malloc(strlen(s) + 1); + strcpy(s2, s); + return s2; +} +#endif // NO_STRDUP + +#ifdef NO_MEMMEM +void *memmem(const void *h, size_t h_size, const void *n, size_t n_size) { + if (n_size == 0) + return (void *)h; + if (n_size > h_size) + return NULL; + + const unsigned char *p = h; + const unsigned char *end = p + h_size - n_size + 1; + unsigned char c = *(unsigned char *)n; + while ((p = memchr(p, c, end - p))) { + if (memcmp(p, n, n_size) == 0) + return (void *)p; + p++; + } + + return NULL; +} +#endif // NO_MEMMEM diff --git a/compat/compat.h b/compat/compat.h new file mode 100644 index 0000000..b36b17f --- /dev/null +++ b/compat/compat.h @@ -0,0 +1,21 @@ +// compat.h +// Compatibility layer for functions not in standard C99 + +#ifndef MOSLIB_COMPAT_H +#define MOSLIB_COMPAT_H + +#define _XOPEN_SOURCE 500 +#define _GNU_SOURCE + +typedef void declaration; + +#ifdef NO_STRDUP +extern char *strdup(const char *s); +#endif // NO_STRDUP + +#ifdef NO_MEMMEM +#include +extern void *memmem(const void *h, size_t h_size, const void *n, size_t n_size); +#endif // NO_MEMMEM + +#endif // MOSLIB_COMPAT_H -- cgit v1.2.3