forked from crom83/cromfarplugs
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathmyrtl.cpp
98 lines (85 loc) · 2.04 KB
/
myrtl.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
#include "stdafx.h"
#include "myrtl.h"
#ifdef __cplusplus
namespace crt
{
extern "C"
{
#endif /* __cplusplus */
void* my_malloc(size_t size)
{
return HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, size);
}
void* my_realloc(void* block, size_t size)
{
if (block)
return HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, block, size);
return HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, size);
}
void my_free(void* block)
{
HeapFree(GetProcessHeap(), 0, block);
}
void* my_memcpy(void* dest, const void* src, size_t n)
{
size_t i;
for (i = 0; i < n; i++) static_cast<unsigned char *>(dest)[i] = static_cast<const unsigned char *>(src)[i];
return dest;
}
char* my_strdup(const char* src)
{
int size = lstrlenA(src) + 1;
char* str = static_cast<char*>(my_malloc(size));
if (str)
my_memcpy(str, src, size);
return str;
}
wchar_t* my_strdupW(const wchar_t* src)
{
int size = (lstrlen(src) + 1) * sizeof(wchar_t);
wchar_t* str = static_cast<wchar_t*>(my_malloc(size));
if (str)
my_memcpy(str, src, size);
return str;
}
void* my_memset(void* s, int c, size_t n)
{
size_t i;
for (i = 0; i < n; i++) static_cast<char *>(s)[i] = c;
return s;
}
int my_strncmp(const char* s1, const char* s2, size_t maxlen)
{
if (!maxlen)
return (0);
while (--maxlen && *s1 && *s1 == *s2)
{
s1++;
s2++;
}
return (*s1 - *s2);
}
const char* my_strchr(const char* s, int c)
{
while (*s)
{
if (*s == c)
return s;
s++;
}
return nullptr;
}
const char* my_strrchr(const char* s, int c)
{
register const char* ss;
register size_t i;
for (i = lstrlenA(s) + 1 , ss = s + i; i; i--)
{
if (*--ss == static_cast<char>(c)) return const_cast<char *>(ss);
}
return nullptr;
}
#ifdef __cplusplus
}
}
#endif /* __cplusplus */