summaryrefslogtreecommitdiff
path: root/fitz/base_memory.c
blob: 643c85b6676e2e8be716b997249f2adcb19ecb41 (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
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
132
133
134
135
#include "fitz.h"

void *
fz_malloc(fz_context *ctx, size_t size)
{
	void *p;
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	p = alloc->malloc(alloc->opaque, size);
	if (!p)
	{
		fz_throw(ctx, "malloc failed (%d bytes)", size);
	}
	return p;
}

void *fz_calloc(fz_context *ctx, size_t count, size_t size)
{
	void *p;
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	p = alloc->calloc(alloc->opaque, count, size);
	if (!p)
	{
		fz_throw(ctx, "calloc failed (%d x %d bytes)", count, size);
	}
	return p;
}

void *
fz_realloc(fz_context *ctx, void *p, size_t size)
{
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	p = alloc->realloc(alloc->opaque, p, size);
	if (!p)
	{
		fz_throw(ctx, "realloc failed (%d bytes)", size);
	}
	return p;
}

void
fz_free(fz_context *ctx, void *p)
{
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	alloc->free(alloc->opaque, p);
}

void *
fz_malloc_nothrow(fz_context *ctx, size_t size)
{
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	return alloc->malloc(alloc->opaque, size);
}

void *fz_calloc_nothrow(fz_context *ctx, size_t count, size_t size)
{
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	return alloc->calloc(alloc->opaque, count, size);
}

void *
fz_realloc_nothrow(fz_context *ctx, void *p, size_t size)
{
	fz_alloc_context *alloc;

	assert(ctx != NULL);
	alloc = ctx->alloc;
	assert(alloc != NULL);
	return alloc->realloc(alloc->opaque, p, size);
}

void *
fz_malloc_default(void *opaque, size_t size)
{
	return malloc(size);
}

void *
fz_calloc_default(void *opaque, size_t count, size_t size)
{
	return calloc(count, size);
}

void *
fz_realloc_default(void *opaque, void *p, size_t size)
{
	return realloc(p, size);
}

void
fz_free_default(void *opaque, void *p)
{
	free(p);
}

fz_alloc_context fz_alloc_default =
{
	(void *)-1,
	fz_malloc_default,
	fz_realloc_default,
	fz_free_default,
	fz_calloc_default
};

char *
fz_strdup(fz_context *ctx, char *s)
{
	int len = strlen(s) + 1;
	char *ns = fz_malloc(ctx, len);
	memcpy(ns, s, len);
	return ns;
}