Downgrade some ERRs to TRACEs
[openal-soft.git] / common / almalloc.c
blob8c1c5794eac96f5473fb4f4fc6c20feafe8e1887
2 #include "config.h"
4 #include "almalloc.h"
6 #include <stdlib.h>
7 #include <string.h>
8 #ifdef HAVE_MALLOC_H
9 #include <malloc.h>
10 #endif
11 #ifdef HAVE_WINDOWS_H
12 #include <windows.h>
13 #endif
15 void *al_malloc(size_t alignment, size_t size)
17 #if defined(HAVE_ALIGNED_ALLOC)
18 size = (size+(alignment-1))&~(alignment-1);
19 return aligned_alloc(alignment, size);
20 #elif defined(HAVE_POSIX_MEMALIGN)
21 void *ret;
22 if(posix_memalign(&ret, alignment, size) == 0)
23 return ret;
24 return NULL;
25 #elif defined(HAVE__ALIGNED_MALLOC)
26 return _aligned_malloc(size, alignment);
27 #else
28 char *ret = malloc(size+alignment);
29 if(ret != NULL)
31 *(ret++) = 0x00;
32 while(((ptrdiff_t)ret&(alignment-1)) != 0)
33 *(ret++) = 0x55;
35 return ret;
36 #endif
39 void *al_calloc(size_t alignment, size_t size)
41 void *ret = al_malloc(alignment, size);
42 if(ret) memset(ret, 0, size);
43 return ret;
46 void al_free(void *ptr)
48 #if defined(HAVE_ALIGNED_ALLOC) || defined(HAVE_POSIX_MEMALIGN)
49 free(ptr);
50 #elif defined(HAVE__ALIGNED_MALLOC)
51 _aligned_free(ptr);
52 #else
53 if(ptr != NULL)
55 char *finder = ptr;
56 do {
57 --finder;
58 } while(*finder == 0x55);
59 free(finder);
61 #endif