/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <folly/portability/Memory.h>
-#include <cerrno>
-#include <cstdlib>
+#include <folly/portability/Config.h>
+#include <folly/portability/Malloc.h>
-#ifdef __ANDROID__
-#include <android/api-level.h>
-#endif
+#include <errno.h>
namespace folly {
namespace detail {
+#if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || \
+ (defined(__ANDROID__) && (__ANDROID_API__ > 15)) || \
+ (defined(__APPLE__) && \
+ (__MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 || \
+ __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_0))
-#ifdef _WIN32
-void* aligned_malloc(size_t size, size_t align) { return nullptr; }
-
-void aligned_free(void* aligned_ptr) {}
-#elif defined(__ANDROID__) && (__ANDROID_API__ <= 15)
-
-void* aligned_malloc(size_t size, size_t align) { return memalign(align, size) }
-
-void aligned_free(void* aligned_ptr) { free(aligned_ptr); }
-
-#else
-// Use poxis_memalign, but mimic the behavior of memalign
+// Use posix_memalign, but mimic the behaviour of memalign
void* aligned_malloc(size_t size, size_t align) {
void* ptr = nullptr;
int rc = posix_memalign(&ptr, align, size);
return nullptr;
}
-void aligned_free(void* aligned_ptr) { free(aligned_ptr); }
+void aligned_free(void* aligned_ptr) {
+ free(aligned_ptr);
+}
+#elif defined(_WIN32)
+void* aligned_malloc(size_t size, size_t align) {
+ return _aligned_malloc(size, align);
+}
+
+void aligned_free(void* aligned_ptr) {
+ _aligned_free(aligned_ptr);
+}
+#else
+
+void* aligned_malloc(size_t size, size_t align) {
+ return memalign(align, size);
+}
+
+void aligned_free(void* aligned_ptr) {
+ free(aligned_ptr);
+}
#endif
}
}