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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* Copyright (C) 2005 PrimeBase Technologies GmbH
*
* PrimeBase XT
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* 2005-01-04 Paul McCullagh
*
* H&G2JCtL
*/
#ifndef __xt_memory_h__
#define __xt_memory_h__
#include <string.h>
#include "xt_defs.h"
struct XTThread;
#ifdef DEBUG
#define DEBUG_MEMORY
#endif
#ifdef DEBUG_MEMORY
#define XT_MM_STACK_TRACE 200
#define XT_MM_TRACE_DEPTH 4
#define XT_MM_TRACE_INC ((char *) 1)
#define XT_MM_TRACE_DEC ((char *) 2)
#define XT_MM_TRACE_SW_INC ((char *) 1)
#define XT_MM_TRACE_SW_DEC ((char *) 2)
#define XT_MM_TRACE_ERROR ((char *) 3)
typedef struct XTMMTraceRef {
int mm_pos;
u_int mm_id;
u_int mm_line[XT_MM_STACK_TRACE];
c_char *mm_trace[XT_MM_STACK_TRACE];
} XTMMTraceRefRec, *XTMMTraceRefPtr;
#define XT_MM_TRACE_INIT(x) (x)->mm_pos = 0
extern char *mm_watch_point;
#define XT_MEMMOVE(b, d, s, l) xt_mm_memmove(b, d, s, l)
#define XT_MEMCPY(b, d, s, l) xt_mm_memcpy(b, d, s, l)
#define XT_MEMSET(b, d, v, l) xt_mm_memset(b, d, v, l)
#define xt_malloc(t, s) xt_mm_malloc(t, s, __LINE__, __FILE__)
#define xt_calloc(t, s) xt_mm_calloc(t, s, __LINE__, __FILE__)
#define xt_realloc(t, p, s) xt_mm_realloc(t, p, s, __LINE__, __FILE__)
#define xt_free xt_mm_free
#define xt_pfree xt_mm_pfree
#define xt_malloc_ns(s) xt_mm_malloc(NULL, s, __LINE__, __FILE__)
#define xt_calloc_ns(s) xt_mm_calloc(NULL, s, __LINE__, __FILE__)
#define xt_realloc_ns(p, s) xt_mm_sys_realloc(NULL, p, s, __LINE__, __FILE__)
#define xt_free_ns(p) xt_mm_free(NULL, p)
void xt_mm_memmove(void *block, void *dest, void *source, size_t size);
void xt_mm_memcpy(void *block, void *dest, void *source, size_t size);
void xt_mm_memset(void *block, void *dest, int value, size_t size);
void *xt_mm_malloc(struct XTThread *self, size_t size, u_int line, const char *file);
void *xt_mm_calloc(struct XTThread *self, size_t size, u_int line, const char *file);
xtBool xt_mm_realloc(struct XTThread *self, void **ptr, size_t size, u_int line, const char *file);
void xt_mm_free(struct XTThread *self, void *ptr);
void xt_mm_pfree(struct XTThread *self, void **ptr);
size_t xt_mm_malloc_size(struct XTThread *self, void *ptr);
void xt_mm_check_ptr(struct XTThread *self, void *ptr);
xtBool xt_mm_sys_realloc(struct XTThread *self, void **ptr, size_t newsize, u_int line, const char *file);
#ifndef XT_SCAN_CORE_DEFINED
#define XT_SCAN_CORE_DEFINED
xtBool xt_mm_scan_core(void);
#endif
void mm_trace_print_id(void *ptr);
void mm_trace_inc(struct XTThread *self, XTMMTraceRefPtr tr);
void mm_trace_dec(struct XTThread *self, XTMMTraceRefPtr tr);
void mm_trace_init(struct XTThread *self, XTMMTraceRefPtr tr);
void mm_trace_print(XTMMTraceRefPtr tr);
#else
#define XT_MEMMOVE(b, d, s, l) memmove(d, s, l)
#define XT_MEMCPY(b, d, s, l) memcpy(d, s, l)
#define XT_MEMSET(b, d, v, l) memset(d, v, l)
void *xt_malloc(struct XTThread *self, size_t size);
void *xt_calloc(struct XTThread *self, size_t size);
xtBool xt_realloc(struct XTThread *self, void **ptr, size_t size);
void xt_free(struct XTThread *self, void *ptr);
void xt_pfree(struct XTThread *self, void **ptr);
void *xt_malloc_ns(size_t size);
void *xt_calloc_ns(size_t size);
xtBool xt_realloc_ns(void **ptr, size_t size);
void xt_free_ns(void *ptr);
#define xt_pfree(t, p) xt_pfree(t, (void **) p)
#endif
#ifdef DEBUG_MEMORY
#define xt_dup_string(t, s) xt_mm_dup_string(t, s, __LINE__, __FILE__)
char *xt_mm_dup_string(struct XTThread *self, const char *path, u_int line, const char *file);
#else
char *xt_dup_string(struct XTThread *self, const char *path);
#endif
char *xt_long_to_str(struct XTThread *self, long v);
char *xt_dup_nstr(struct XTThread *self, const char *str, int start, size_t len);
xtBool xt_init_memory(void);
void xt_exit_memory(void);
#endif
|