aboutsummaryrefslogtreecommitdiffstats
path: root/libparc/parc/algol/parc_StdlibMemory.c
diff options
context:
space:
mode:
authorAngelo Mantellini <manangel@cisco.com>2019-02-05 08:50:26 +0100
committerAngelo Mantellini <manangel@cisco.com>2019-02-06 16:23:04 +0100
commit9f68541e0f55495d61dd9e583bec38740a247597 (patch)
tree55519e34159ac1eb691e080e4c1eab5b0e4847bd /libparc/parc/algol/parc_StdlibMemory.c
parentb77148ddc3def71e6c412c3afb5f1c20be2d77cd (diff)
[HICN-26] Windows compatibilty for libparc
Change-Id: I6ebff82a81a2bf42fa3bf210ff0e6e530ce21915 Signed-off-by: Angelo Mantellini <manangel@cisco.com>
Diffstat (limited to 'libparc/parc/algol/parc_StdlibMemory.c')
-rw-r--r--[-rwxr-xr-x]libparc/parc/algol/parc_StdlibMemory.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/libparc/parc/algol/parc_StdlibMemory.c b/libparc/parc/algol/parc_StdlibMemory.c
index 11381a54..536823d0 100755..100644
--- a/libparc/parc/algol/parc_StdlibMemory.c
+++ b/libparc/parc/algol/parc_StdlibMemory.c
@@ -13,20 +13,18 @@
* limitations under the License.
*/
-/**
- */
-#include <config.h>
+#ifndef _WIN32
+#include <sys/errno.h>
+#endif
+#include <config.h>
#include <stdio.h>
#include <stdlib.h>
-#include <sys/errno.h>
#include <stdbool.h>
#include <string.h>
-#include <strings.h>
#include <pthread.h>
#include <parc/assert/parc_Assert.h>
-
#include <parc/algol/parc_StdlibMemory.h>
static uint32_t _parcStdlibMemory_OutstandingAllocations;
@@ -114,14 +112,23 @@ parcStdlibMemory_MemAlign(void **pointer, size_t alignment, size_t size)
return EINVAL;
}
+#ifndef _WIN32
int failure = posix_memalign(pointer, alignment, size);
if (failure != 0) {
return failure;
}
+
if (*pointer == NULL) {
return ENOMEM;
}
+#else
+ *pointer= _aligned_malloc(size, alignment);
+
+ if (*pointer == NULL) {
+ return errno;
+ }
+#endif
_parcStdlibMemory_IncrementOutstandingAllocations();
@@ -141,6 +148,22 @@ parcStdlibMemory_Deallocate(void **pointer)
_parcStdlibMemory_DecrementOutstandingAllocations();
}
+#ifdef _WIN32
+void
+parcStdlibMemory_DeallocateAlign(void **pointer)
+{
+#ifndef PARCLibrary_DISABLE_VALIDATION
+ parcTrapIllegalValueIf(_parcStdlibMemory_OutstandingAllocations == 0,
+ "parcStdlibMemory_DeallocateAlign invoked with nothing left to free (double free somewhere?)\n");
+#endif
+ _aligned_free(*pointer);
+ *pointer = NULL;
+
+ _parcStdlibMemory_DecrementOutstandingAllocations();
+}
+
+#endif
+
void *
parcStdlibMemory_Reallocate(void *pointer, size_t newSize)
{
@@ -174,6 +197,9 @@ PARCMemoryInterface PARCStdlibMemoryAsPARCMemory = {
.AllocateAndClear = (uintptr_t) parcStdlibMemory_AllocateAndClear,
.MemAlign = (uintptr_t) parcStdlibMemory_MemAlign,
.Deallocate = (uintptr_t) parcStdlibMemory_Deallocate,
+#ifdef _WIN32
+ .DeallocateAlign = (uintptr_t) parcStdlibMemory_DeallocateAlign,
+#endif
.Reallocate = (uintptr_t) parcStdlibMemory_Reallocate,
.StringDuplicate = (uintptr_t) parcStdlibMemory_StringDuplicate,
.Outstanding = (uintptr_t) parcStdlibMemory_Outstanding