This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
/
malloc.cpp
116 lines (90 loc) · 1.75 KB
/
malloc.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
/*++
Module Name:
malloc.cpp
Abstract:
Implementation of suspension safe memory allocation functions.
Revision History:
--*/
#include "pal/corunix.hpp"
#include "pal/thread.hpp"
#include "pal/malloc.hpp"
#include "pal/dbgmsg.h"
#include <string.h>
SET_DEFAULT_DEBUG_CHANNEL(CRT);
using namespace CorUnix;
void *
__cdecl
PAL_realloc(
void* pvMemblock,
size_t szSize
)
{
return InternalRealloc(pvMemblock, szSize);
}
void *
CorUnix::InternalRealloc(
void* pvMemblock,
size_t szSize
)
{
void *pvMem;
PERF_ENTRY(InternalRealloc);
ENTRY("realloc (memblock:%p size=%d)\n", pvMemblock, szSize);
if (szSize == 0)
{
// If pvMemblock is NULL, there's no reason to call free.
if (pvMemblock != NULL)
{
free(pvMemblock);
}
pvMem = NULL;
}
else
{
pvMem = realloc(pvMemblock, szSize);
}
LOGEXIT("realloc returns void * %p\n", pvMem);
PERF_EXIT(InternalRealloc);
return pvMem;
}
void
__cdecl
PAL_free(
void *pvMem
)
{
free(pvMem);
}
void *
__cdecl
PAL_malloc(
size_t szSize
)
{
return InternalMalloc(szSize);
}
void *
CorUnix::InternalMalloc(
size_t szSize
)
{
void *pvMem;
if (szSize == 0)
{
// malloc may return null for a requested size of zero bytes. Force a nonzero size to get a valid pointer.
szSize = 1;
}
pvMem = (void*)malloc(szSize);
return pvMem;
}
char *
__cdecl
PAL__strdup(
const char *c_szStr
)
{
return strdup(c_szStr);
}