diff options
Diffstat (limited to 'libparc/parc/algol/parc_StdlibMemory.c')
-rwxr-xr-x | libparc/parc/algol/parc_StdlibMemory.c | 180 |
1 files changed, 0 insertions, 180 deletions
diff --git a/libparc/parc/algol/parc_StdlibMemory.c b/libparc/parc/algol/parc_StdlibMemory.c deleted file mode 100755 index 11381a54..00000000 --- a/libparc/parc/algol/parc_StdlibMemory.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - */ -#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; - -#ifdef PARCLibrary_DISABLE_ATOMICS -static pthread_mutex_t _parcStdlibMemory_Mutex = PTHREAD_MUTEX_INITIALIZER; - -static inline void -_parcStdlibMemory_IncrementOutstandingAllocations(void) -{ - pthread_mutex_lock(&_parcStdlibMemory_Mutex); - _parcStdlibMemory_OutstandingAllocations++; - pthread_mutex_unlock(&_parcStdlibMemory_Mutex); -} - -static inline void -_parcStdlibMemory_DecrementOutstandingAllocations(void) -{ - pthread_mutex_lock(&_parcStdlibMemory_Mutex); - _parcStdlibMemory_OutstandingAllocations--; - pthread_mutex_unlock(&_parcStdlibMemory_Mutex); -} -#else - -static inline void -_parcStdlibMemory_IncrementOutstandingAllocations(void) -{ - __sync_add_and_fetch(&_parcStdlibMemory_OutstandingAllocations, 1); -} - -static inline void -_parcStdlibMemory_DecrementOutstandingAllocations(void) -{ - __sync_sub_and_fetch(&_parcStdlibMemory_OutstandingAllocations, 1); -} -#endif - -#ifndef HAVE_REALLOC -static void * -_parcStdlibMemory_rplRealloc(void *oldAlloc, size_t newSize) -{ - if (newSize == 0) { - newSize = 1; - } - - char *newAlloc = malloc(newSize); - - if (oldAlloc != NULL) { - memcpy(newAlloc, oldAlloc, newSize); - free(oldAlloc); - } - return newAlloc; -} -#endif - -void * -parcStdlibMemory_Allocate(size_t size) -{ - if (size == 0) { - return NULL; - } - - void *result = malloc(size); - if (result != NULL) { - _parcStdlibMemory_IncrementOutstandingAllocations(); - } - - return result; -} - -void * -parcStdlibMemory_AllocateAndClear(size_t size) -{ - void *pointer = parcStdlibMemory_Allocate(size); - if (pointer != NULL) { - memset(pointer, 0, size); - } - return pointer; -} - -int -parcStdlibMemory_MemAlign(void **pointer, size_t alignment, size_t size) -{ - if (size == 0) { - return EINVAL; - } - - int failure = posix_memalign(pointer, alignment, size); - - if (failure != 0) { - return failure; - } - if (*pointer == NULL) { - return ENOMEM; - } - - _parcStdlibMemory_IncrementOutstandingAllocations(); - - return 0; -} - -void -parcStdlibMemory_Deallocate(void **pointer) -{ -#ifndef PARCLibrary_DISABLE_VALIDATION - parcTrapIllegalValueIf(_parcStdlibMemory_OutstandingAllocations == 0, - "parcStdlibMemory_Deallocate invoked with nothing left to free (double free somewhere?)\n"); -#endif - free(*pointer); - *pointer = NULL; - - _parcStdlibMemory_DecrementOutstandingAllocations(); -} - -void * -parcStdlibMemory_Reallocate(void *pointer, size_t newSize) -{ -#ifdef HAVE_REALLOC - void *result = realloc(pointer, newSize); -#else - void *result = _parcStdlibMemory_rplRealloc(pointer, newSize); -#endif - - if (pointer == NULL) { - _parcStdlibMemory_IncrementOutstandingAllocations(); - } - return result; -} - -char * -parcStdlibMemory_StringDuplicate(const char *string, size_t length) -{ - _parcStdlibMemory_IncrementOutstandingAllocations(); - return strndup(string, length); -} - -uint32_t -parcStdlibMemory_Outstanding(void) -{ - return _parcStdlibMemory_OutstandingAllocations; -} - -PARCMemoryInterface PARCStdlibMemoryAsPARCMemory = { - .Allocate = (uintptr_t) parcStdlibMemory_Allocate, - .AllocateAndClear = (uintptr_t) parcStdlibMemory_AllocateAndClear, - .MemAlign = (uintptr_t) parcStdlibMemory_MemAlign, - .Deallocate = (uintptr_t) parcStdlibMemory_Deallocate, - .Reallocate = (uintptr_t) parcStdlibMemory_Reallocate, - .StringDuplicate = (uintptr_t) parcStdlibMemory_StringDuplicate, - .Outstanding = (uintptr_t) parcStdlibMemory_Outstanding -}; |