Add Windows support to portability/Memory.h
authorChristopher Dykes <cdykes@fb.com>
Mon, 21 Mar 2016 22:05:49 +0000 (15:05 -0700)
committerFacebook Github Bot 9 <facebook-github-bot-9-bot@fb.com>
Mon, 21 Mar 2016 22:20:21 +0000 (15:20 -0700)
Summary: This adds Windows support to portability/Memory.h and also does some refactoring to be more correct about when to use posix_memalign, and also changes it to fall back to memalign rather than posix_memalign.

Reviewed By: mzlee

Differential Revision: D3069990

fb-gh-sync-id: 88861583c6028e9fb02a3e3804bd6d476956c555
shipit-source-id: 88861583c6028e9fb02a3e3804bd6d476956c555

folly/portability/Memory.cpp
folly/portability/Memory.h

index f57086af47831e28aaa0f3aef96470e51c640be4..3310c0d294a571ad2d2fd0f856f4667ffa26650d 100644 (file)
 
 #include <folly/portability/Memory.h>
 
-#include <cerrno>
-#include <cstdlib>
-
-#ifdef __ANDROID__
-#include <android/api-level.h>
-#endif
+#include <folly/portability/Config.h>
 
 namespace folly {
 namespace detail {
+#if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || \
+    (defined(__ANDROID__) && (__ANDROID_API__ > 15))
+#include <errno.h>
 
-#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 +35,29 @@ 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)
+#include <malloc.h> // nolint
 
+void* aligned_malloc(size_t size, size_t align) {
+  return _aligned_malloc(size, alignment);
+}
+
+void aligned_free(void* aligned_ptr) {
+  _aligned_free(aligned_ptr);
+}
+#else
+#include <malloc.h> // nolint
+
+void* aligned_malloc(size_t size, size_t align) {
+  return memalign(align, size);
+}
+
+void aligned_free(void* aligned_ptr) {
+  free(aligned_ptr);
+}
 #endif
 }
 }
index f46e9cea6f4d9a332ccb25c5c0004072526479e3..c9d4f1e0ada721a5bcf38da86be681a85e6fa02e 100644 (file)
 
 #pragma once
 
-#include <cstdlib>
+#include <stdlib.h>
 
 namespace folly {
 namespace detail {
-
 void* aligned_malloc(size_t size, size_t align);
-
 void aligned_free(void* aligned_ptr);
 }
 }