]> git.8kb.co.uk Git - dataflex/dfregex/blob - src/c/memman.c
Initial Commit
[dataflex/dfregex] / src / c / memman.c
1 /*-------------------------------------------------------------------------\r
2  * posix regex extensions\r
3  *\r
4  * Copyright (c) 2015, glyn@8kb.co.uk\r
5  * Author: Glyn Astill <glyn@8kb.co.uk>\r
6  *\r
7  *-------------------------------------------------------------------------\r
8  */\r
9 \r
10 #include <stdio.h>\r
11 #include <stdlib.h>\r
12 #include <assert.h>\r
13 \r
14 /*\r
15  * Wrappers around malloc/realloc/free\r
16  */\r
17 void * wmalloc(unsigned int size) {\r
18     char         *result;\r
19 \r
20     if ((result = malloc(size)) == NULL) {\r
21         fprintf(stderr, "Failed to malloc %d bytes\n", size);\r
22         exit(1);\r
23     }\r
24     return result;\r
25 }\r
26 \r
27 void * wrealloc(void *iptr, unsigned int size) {\r
28     char         *result;\r
29 \r
30     assert(iptr != NULL);\r
31 \r
32     if ((result = realloc(iptr, size)) == NULL) {\r
33         fprintf(stderr, "Failed to realloc %d bytes\n", size);\r
34         exit(1);\r
35     }\r
36     return result;\r
37 }\r
38 \r
39 void wfree(void *iptr){\r
40    assert(iptr != NULL);\r
41 \r
42     if (iptr) {\r
43        free(iptr);\r
44     }\r
45     iptr = NULL;\r
46 }\r
47 \r
48 /*\r
49  * Reallocate memory block pointed to by iptr in chunks of chunk_size when\r
50  * required_size is greater than value pointed to be allocated_size.\r
51  * Sets value of allocated_size to current allocation.\r
52  */\r
53 void * reallocate_block(void *iptr, int *allocated_size, int required_size, int chunk_size) {\r
54     void        *result;\r
55 \r
56     if (*allocated_size >= required_size)\r
57         return iptr;\r
58 \r
59     *allocated_size += (((required_size-*allocated_size)/chunk_size)+1)*chunk_size;\r
60 \r
61     result = wrealloc(iptr, *allocated_size);\r
62 \r
63     return result;\r
64 }\r