blob: d97c7f4350d2833fcfaa2a4ec5d9bd0b082f203d (
plain)
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
|
#pragma once
#include <klibc/string.hpp>
#include <klibc/stdlib.hpp>
using namespace klibc;
#define realloc(ptr, new_size) \
({ \
void *__new_ptr = NULL; \
size_t __new_size = (new_size); \
\
if (__new_size == 0) { \
/* Если размер 0 - free и возвращаем NULL */ \
if (ptr) free(ptr); \
__new_ptr = NULL; \
} else { \
/* Выделяем новую память */ \
__new_ptr = malloc(__new_size); \
if (__new_ptr && ptr) { \
/* Копируем старые данные (размер неизвестен, копируем сколько влезет) */ \
/* Примечание: old_size неизвестен, поэтому копируем весь новый размер */ \
/* Это безопасно только если старый размер >= нового */ \
memcpy(__new_ptr, ptr, __new_size); \
} \
/* Освобождаем старый указатель */ \
if (ptr) { \
free(ptr); \
} \
} \
__new_ptr; \
})
|