]> git.proxmox.com Git - mirror_edk2.git/blame - CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
CryptoPkg: Apply uncrustify changes
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / SysCall / BaseMemAllocation.c
CommitLineData
97f98500
HT
1/** @file\r
2 Base Memory Allocation Routines Wrapper for Crypto library over OpenSSL\r
3 during PEI & DXE phases.\r
4\r
fc9fa685 5Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>\r
2009f6b4 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
97f98500
HT
7\r
8**/\r
9\r
fc9fa685
QL
10#include <CrtLibSupport.h>\r
11#include <Library/MemoryAllocationLib.h>\r
97f98500 12\r
cf8197a3
LQ
13//\r
14// Extra header to record the memory buffer size from malloc routine.\r
15//\r
7c342378 16#define CRYPTMEM_HEAD_SIGNATURE SIGNATURE_32('c','m','h','d')\r
cf8197a3
LQ
17typedef struct {\r
18 UINT32 Signature;\r
19 UINT32 Reserved;\r
20 UINTN Size;\r
21} CRYPTMEM_HEAD;\r
22\r
7c342378 23#define CRYPTMEM_OVERHEAD sizeof(CRYPTMEM_HEAD)\r
cf8197a3 24\r
97f98500
HT
25//\r
26// -- Memory-Allocation Routines --\r
27//\r
28\r
29/* Allocates memory blocks */\r
7c342378
MK
30void *\r
31malloc (\r
32 size_t size\r
33 )\r
97f98500 34{\r
cf8197a3
LQ
35 CRYPTMEM_HEAD *PoolHdr;\r
36 UINTN NewSize;\r
37 VOID *Data;\r
38\r
39 //\r
40 // Adjust the size by the buffer header overhead\r
41 //\r
42 NewSize = (UINTN)(size) + CRYPTMEM_OVERHEAD;\r
43\r
7c342378 44 Data = AllocatePool (NewSize);\r
cf8197a3
LQ
45 if (Data != NULL) {\r
46 PoolHdr = (CRYPTMEM_HEAD *)Data;\r
47 //\r
48 // Record the memory brief information\r
49 //\r
50 PoolHdr->Signature = CRYPTMEM_HEAD_SIGNATURE;\r
51 PoolHdr->Size = size;\r
52\r
53 return (VOID *)(PoolHdr + 1);\r
54 } else {\r
55 //\r
56 // The buffer allocation failed.\r
57 //\r
58 return NULL;\r
59 }\r
97f98500
HT
60}\r
61\r
62/* Reallocate memory blocks */\r
7c342378
MK
63void *\r
64realloc (\r
65 void *ptr,\r
66 size_t size\r
67 )\r
97f98500 68{\r
cf8197a3
LQ
69 CRYPTMEM_HEAD *OldPoolHdr;\r
70 CRYPTMEM_HEAD *NewPoolHdr;\r
71 UINTN OldSize;\r
72 UINTN NewSize;\r
73 VOID *Data;\r
74\r
75 NewSize = (UINTN)size + CRYPTMEM_OVERHEAD;\r
7c342378 76 Data = AllocatePool (NewSize);\r
cf8197a3 77 if (Data != NULL) {\r
7c342378 78 NewPoolHdr = (CRYPTMEM_HEAD *)Data;\r
cf8197a3
LQ
79 NewPoolHdr->Signature = CRYPTMEM_HEAD_SIGNATURE;\r
80 NewPoolHdr->Size = size;\r
81 if (ptr != NULL) {\r
82 //\r
83 // Retrieve the original size from the buffer header.\r
84 //\r
85 OldPoolHdr = (CRYPTMEM_HEAD *)ptr - 1;\r
86 ASSERT (OldPoolHdr->Signature == CRYPTMEM_HEAD_SIGNATURE);\r
87 OldSize = OldPoolHdr->Size;\r
88\r
89 //\r
90 // Duplicate the buffer content.\r
91 //\r
92 CopyMem ((VOID *)(NewPoolHdr + 1), ptr, MIN (OldSize, size));\r
93 FreePool ((VOID *)OldPoolHdr);\r
94 }\r
95\r
96 return (VOID *)(NewPoolHdr + 1);\r
97 } else {\r
98 //\r
99 // The buffer allocation failed.\r
100 //\r
101 return NULL;\r
102 }\r
97f98500
HT
103}\r
104\r
105/* De-allocates or frees a memory block */\r
7c342378
MK
106void\r
107free (\r
108 void *ptr\r
109 )\r
97f98500 110{\r
cf8197a3
LQ
111 CRYPTMEM_HEAD *PoolHdr;\r
112\r
211372d6
LE
113 //\r
114 // In Standard C, free() handles a null pointer argument transparently. This\r
115 // is not true of FreePool() below, so protect it.\r
116 //\r
117 if (ptr != NULL) {\r
cf8197a3
LQ
118 PoolHdr = (CRYPTMEM_HEAD *)ptr - 1;\r
119 ASSERT (PoolHdr->Signature == CRYPTMEM_HEAD_SIGNATURE);\r
120 FreePool (PoolHdr);\r
211372d6 121 }\r
97f98500 122}\r