26 #if !(__STDC_VERSION__ >= 201112L) && !LELY_NO_MALLOC
28 #ifndef LELY_HAVE_POSIX_MEMALIGN
29 #if _POSIX_C_SOURCE >= 200112L
30 #define LELY_HAVE_POSIX_MEMALIGN 1
31 #if defined(__NEWLIB__) && !defined(__rtems__)
32 #undef LELY_HAVE_POSIX_MEMALIGN
39 #elif LELY_HAVE_POSIX_MEMALIGN
53 return _aligned_malloc(size, alignment);
54 #elif LELY_HAVE_POSIX_MEMALIGN
56 int errc = posix_memalign(&ptr, alignment, size);
65 #else // !_WIN32 && !LELY_HAVE_POSIX_MEMALIGN
68 if ((alignment & (alignment - 1)) || alignment <
sizeof(
void *))
77 void *ptr = malloc(size + alignment);
81 void *aligned_ptr = (
void *)(((uintptr_t)(
char *)ptr + alignment - 1)
82 & ~(uintptr_t)(alignment - 1));
85 ((
void **)aligned_ptr)[-1] = ptr;
88 #endif // !_WIN32 && !LELY_HAVE_POSIX_MEMALIGN
98 #elif LELY_HAVE_POSIX_MEMALIGN
102 free(((
void **)ptr)[-1]);
106 #endif // !__USE_ISOC11
108 #endif // !(__STDC_VERSION__ >= 201112L) && !LELY_NO_MALLOC
110 #if _WIN32 && !LELY_NO_STDIO
117 setenv(
const char *envname,
const char *envval,
int overwrite)
124 if (!overwrite && getenv(envname))
127 for (
const char *cp = envname; *cp; cp++) {
135 if (
asprintf(&
string,
"%s=%s", envname, envval) < 0)
138 if (_putenv(
string)) {