do not use aligned_alloc since it requires c11
This commit is contained in:
parent
0dc4914b4e
commit
2d410fc74b
|
@ -225,20 +225,16 @@ CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
|
|||
include(TestLargeFiles)
|
||||
OPJ_TEST_LARGE_FILES(OPJ_HAVE_LARGEFILES)
|
||||
|
||||
# Allocating Aligned Memory Blocks
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files(malloc.h HAVE_MALLOC_H)
|
||||
include(CheckSymbolExists)
|
||||
# aligned_alloc
|
||||
set(CMAKE_REQUIRED_FLAGS "-std=c11")
|
||||
check_symbol_exists(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC)
|
||||
unset(CMAKE_REQUIRED_FLAGS)
|
||||
# _aligned_alloc https://msdn.microsoft.com/en-us/library/8z34s9c6.aspx
|
||||
check_symbol_exists(_aligned_malloc malloc.h HAVE__ALIGNED_MALLOC)
|
||||
# memalign
|
||||
check_symbol_exists(memalign malloc.h HAVE_MEMALIGN)
|
||||
# posix_memalign
|
||||
check_symbol_exists(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
|
||||
|
||||
# memalign (obsolete)
|
||||
check_symbol_exists(memalign malloc.h HAVE_MEMALIGN)
|
||||
#-----------------------------------------------------------------------------
|
||||
# Build Library
|
||||
if(BUILD_JPIP_SERVER)
|
||||
|
|
|
@ -30,36 +30,34 @@
|
|||
*/
|
||||
#define OPJ_SKIP_POISON
|
||||
#include "opj_malloc.h"
|
||||
#include "opj_config_private.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
static inline void *opj_aligned_alloc(size_t alignment, size_t size)
|
||||
{
|
||||
#ifndef HAVE_ALIGNED_ALLOC
|
||||
/* older linux */
|
||||
#ifdef HAVE_MEMALIGN
|
||||
assert( size % alignment == 0 );
|
||||
return memalign( alignment, size );
|
||||
#endif /* HAVE_MEMALIGN */
|
||||
|
||||
/* _MSC_VER */
|
||||
#ifdef HAVE__ALIGNED_MALLOC
|
||||
return _aligned_malloc( alignment, size );
|
||||
#endif /* HAVE__ALIGNED_MALLOC */
|
||||
|
||||
/* MacOSX / clang */
|
||||
#if defined(HAVE_POSIX_MEMALIGN) && !defined(HAVE_MEMALIGN)
|
||||
#if defined(HAVE_POSIX_MEMALIGN)
|
||||
// aligned_alloc requires c11, restrict to posix_memalign for now. Quote:
|
||||
// This function was introduced in POSIX 1003.1d. Although this function is
|
||||
// superseded by aligned_alloc, it is more portable to older POSIX systems
|
||||
// that do not support ISO C11.
|
||||
void* ptr;
|
||||
if (posix_memalign (&ptr, alignment, size))
|
||||
{
|
||||
ptr = NULL;
|
||||
}
|
||||
return ptr;
|
||||
#endif /* HAVE_POSIX_MEMALIGN */
|
||||
|
||||
#else /* HAVE_ALIGNED_ALLOC */
|
||||
return aligned_alloc( alignment, size );
|
||||
#endif /* HAVE_ALIGNED_ALLOC */
|
||||
/* older linux */
|
||||
#elif defined(HAVE_MEMALIGN)
|
||||
assert( size % alignment == 0 );
|
||||
return memalign( alignment, size );
|
||||
/* _MSC_VER */
|
||||
#elif defined(HAVE__ALIGNED_MALLOC)
|
||||
return _aligned_malloc( alignment, size );
|
||||
#else
|
||||
/* TODO: _mm_malloc(x,y) */
|
||||
#error missing aligned alloc function
|
||||
#endif
|
||||
}
|
||||
|
||||
void * opj_malloc(size_t size)
|
||||
|
@ -74,7 +72,7 @@ void * opj_calloc(size_t numOfElements, size_t sizeOfElements)
|
|||
|
||||
void *opj_aligned_malloc(size_t size)
|
||||
{
|
||||
return opj_aligned_alloc(size,16);
|
||||
return opj_aligned_alloc(16u,size);
|
||||
}
|
||||
|
||||
void opj_aligned_free(void* ptr)
|
||||
|
|
Loading…
Reference in New Issue