Home | History | Annotate | Line # | Download | only in common
      1 /*
      2  * Copyright (c) Meta Platforms, Inc. and affiliates.
      3  * All rights reserved.
      4  *
      5  * This source code is licensed under both the BSD-style license (found in the
      6  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
      7  * in the COPYING file in the root directory of this source tree).
      8  * You may select, at your option, one of the above-listed licenses.
      9  */
     10 
     11 /* This file provides custom allocation primitives
     12  */
     13 
     14 #define ZSTD_DEPS_NEED_MALLOC
     15 #include "zstd_deps.h"   /* ZSTD_malloc, ZSTD_calloc, ZSTD_free, ZSTD_memset */
     16 
     17 #include "compiler.h" /* MEM_STATIC */
     18 #define ZSTD_STATIC_LINKING_ONLY
     19 #include "../zstd.h" /* ZSTD_customMem */
     20 
     21 #ifndef ZSTD_ALLOCATIONS_H
     22 #define ZSTD_ALLOCATIONS_H
     23 
     24 /* custom memory allocation functions */
     25 
     26 MEM_STATIC void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem)
     27 {
     28     if (customMem.customAlloc)
     29         return customMem.customAlloc(customMem.opaque, size);
     30     return ZSTD_malloc(size);
     31 }
     32 
     33 MEM_STATIC void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem)
     34 {
     35     if (customMem.customAlloc) {
     36         /* calloc implemented as malloc+memset;
     37          * not as efficient as calloc, but next best guess for custom malloc */
     38         void* const ptr = customMem.customAlloc(customMem.opaque, size);
     39         ZSTD_memset(ptr, 0, size);
     40         return ptr;
     41     }
     42     return ZSTD_calloc(1, size);
     43 }
     44 
     45 MEM_STATIC void ZSTD_customFree(void* ptr, ZSTD_customMem customMem)
     46 {
     47     if (ptr!=NULL) {
     48         if (customMem.customFree)
     49             customMem.customFree(customMem.opaque, ptr);
     50         else
     51             ZSTD_free(ptr);
     52     }
     53 }
     54 
     55 #endif /* ZSTD_ALLOCATIONS_H */
     56