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 "mem.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 | |