mirror of https://code.videolan.org/videolan/vlc
vlc_memalign(): osx 10.5 doesn't have posix_memalign()
This commit is contained in:
parent
3388e6b03a
commit
06c9784ad6
|
@ -886,10 +886,34 @@ static inline void SetQWLE (void *p, uint64_t qw)
|
|||
VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t );
|
||||
|
||||
/* Aligned memory allocator */
|
||||
#ifdef __APPLE__
|
||||
#include <AvailabilityMacros.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
# include <malloc.h>
|
||||
# define vlc_memalign(align, size) (__mingw_aligned_malloc(size, align))
|
||||
# define vlc_free(base) (__mingw_aligned_free(base))
|
||||
#elif defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6)
|
||||
static inline void *vlc_memalign(size_t align, size_t size)
|
||||
{
|
||||
long diff;
|
||||
void *ptr;
|
||||
|
||||
ptr = malloc(size+align);
|
||||
if(!ptr)
|
||||
return ptr;
|
||||
diff = ((-(long)ptr - 1)&(align-1)) + 1;
|
||||
ptr = (char*)ptr + diff;
|
||||
((char*)ptr)[-1]= diff;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void vlc_free(void *ptr)
|
||||
{
|
||||
if (ptr)
|
||||
free((char*)ptr - ((char*)ptr)[-1]);
|
||||
}
|
||||
#else
|
||||
static inline void *vlc_memalign(size_t align, size_t size)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue