folly/portability/Memory.cpp: restructure preprocessor conditionals so includes are...
[folly.git] / folly / portability / Memory.cpp
index f57086af47831e28aaa0f3aef96470e51c640be4..c4a0fff344488cf39f8614c21461a8c413bc3581 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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))
 
-#if 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);
@@ -46,8 +39,27 @@ void* aligned_malloc(size_t size, size_t align) {
   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
 }
 }