ObjFW  Diff

Differences From Artifact [9ea6f8965e]:

To Artifact [c0fb34ec43]:


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
		__memchunks_size = 0;
	}
	return self;
}

- free
{
	size_t i;

	for (i = 0; i < __memchunks_size; i++)
		free(__memchunks[i]);

	if (__memchunks != NULL)
		free(__memchunks);

	free(self);

	return nil;







|

|
|







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
		__memchunks_size = 0;
	}
	return self;
}

- free
{
	void **iter = __memchunks + __memchunks_size;

	while (iter-- > __memchunks)
		free(*iter);

	if (__memchunks != NULL)
		free(__memchunks);

	free(self);

	return nil;
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
	memsize = nitems * size;
	return [self getMemWithSize: memsize];
}

- (void*)resizeMem: (void*)ptr
	    toSize: (size_t)size
{
	size_t i;

	if (ptr == NULL)
		return [self getMemWithSize: size];

	if (size == 0) {
		[self freeMem: ptr];
		return NULL;
	}


	for (i = 0; i < __memchunks_size; i++) {

		if (__memchunks[i] == ptr) {
			if ((ptr = realloc(ptr, size)) == NULL)
				[[OFNoMemException newWithObject: self
							 andSize: size] raise];
			
			__memchunks[i] = ptr;
			return ptr;
		}
	}

	[[OFMemNotPartOfObjException newWithObject: self
					andPointer: ptr] raise];
	return NULL;	/* never reached, but makes gcc happy */







|









>
|
>
|




|







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
	memsize = nitems * size;
	return [self getMemWithSize: memsize];
}

- (void*)resizeMem: (void*)ptr
	    toSize: (size_t)size
{
	void **iter;

	if (ptr == NULL)
		return [self getMemWithSize: size];

	if (size == 0) {
		[self freeMem: ptr];
		return NULL;
	}

	iter = __memchunks + __memchunks_size;

	while (iter-- > __memchunks) {
		if (*iter == ptr) {
			if ((ptr = realloc(ptr, size)) == NULL)
				[[OFNoMemException newWithObject: self
							 andSize: size] raise];
			
			*iter = ptr;
			return ptr;
		}
	}

	[[OFMemNotPartOfObjException newWithObject: self
					andPointer: ptr] raise];
	return NULL;	/* never reached, but makes gcc happy */
144
145
146
147
148
149
150
151
152
153

154




155
156
157
158
159
160
161
162
	memsize = nitems * size;
	return [self resizeMem: ptr
			toSize: memsize];
}

- freeMem: (void*)ptr;
{
	void *last, **memchunks;
	size_t i, memchunks_size;


	for (i = 0; i < __memchunks_size; i++) {




		if (__memchunks[i] == ptr) {
			memchunks_size = __memchunks_size - 1;
			last = __memchunks[memchunks_size];

			if (__memchunks_size == 0 ||
			    memchunks_size > SIZE_MAX / sizeof(void*))
				[[OFOutOfRangeException newWithObject: self]
				    raise];







|


>
|
>
>
>
>
|







146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
	memsize = nitems * size;
	return [self resizeMem: ptr
			toSize: memsize];
}

- freeMem: (void*)ptr;
{
	void **iter, *last, **memchunks;
	size_t i, memchunks_size;

	iter = __memchunks + __memchunks_size;
	i = __memchunks_size;

	while (iter-- > __memchunks) {
		i--;

		if (*iter == ptr) {
			memchunks_size = __memchunks_size - 1;
			last = __memchunks[memchunks_size];

			if (__memchunks_size == 0 ||
			    memchunks_size > SIZE_MAX / sizeof(void*))
				[[OFOutOfRangeException newWithObject: self]
				    raise];