]> git.donarmstrong.com Git - biopieces.git/blob - code_c/Maasha/src/lib/mem.c
fixed rename bug
[biopieces.git] / code_c / Maasha / src / lib / mem.c
1 /* Martin Asser Hansen (mail@maasha.dk) Copyright (C) 2008 - All right reserved */
2
3 #include "common.h"
4 #include "mem.h"
5
6
7 void *mem_get( size_t size )
8 {
9     /* Martin A. Hansen, May 2008 */
10
11     /* Unit test done.*/
12
13     /* Allocate a given chunk of memory to a pointer that is returned. */
14
15     void *pt;
16
17     assert( size > 0 );
18
19     if ( ( pt = malloc( size ) ) == NULL )
20     {
21         fprintf( stderr, "ERROR: Could not allocate %zu byte(s): %s\n", size, strerror( errno ) );
22         abort();
23     } 
24
25     return pt;
26 }
27
28
29 void *mem_get_zero( size_t size )
30 {
31     /* Martin A. Hansen, May 2008 */
32
33     /* Unit test done.*/
34
35     /* Allocate a given chunk of zero'ed memory to a pointer that is returned. */
36
37     void *pt;
38
39     assert( size > 0 );
40
41     pt = mem_get( size );
42
43     bzero( pt, size );
44
45     return pt;
46 }
47
48
49 void *mem_resize( void *pt, size_t size )
50 {
51     /* Martin A. Hansen, May 2008 */
52
53     /* Unit test done.*/
54
55     /* Resize an allocated chunk of memory for a given pointer and new size. */
56
57     void *pt_new;
58
59     assert( size > 0 );
60
61     if ( ( pt_new = realloc( pt, size ) ) == NULL )
62     {
63         fprintf( stderr, "ERROR: Could not re-allocate %zu byte(s)\n", size );
64         abort();
65     }
66
67     return pt_new;
68 }
69
70
71 void *mem_resize_zero( void *pt, size_t old_size, size_t new_size )
72 {
73     /* Martin A. Hansen, May 2008 */
74
75     /* Unit test done.*/
76
77     /* Resize an allocated chunk of memory for a given pointer and zero any extra memory. */
78     
79     void *pt_new;
80
81     pt_new = mem_resize( pt, new_size );
82
83     if ( new_size > old_size ) {
84         bzero( ( ( void * ) pt_new ) + old_size, new_size - old_size );
85     }
86
87     return pt_new;
88 }
89
90
91 void *mem_clone( void *old_pt, size_t size )
92 {
93     /* Martin A. Hansen, June 2008 */
94
95     /* Unit test done.*/
96
97     /* Clone a structure in memory and return a pointer to the clone. */
98
99     void *new_pt;
100     
101     assert( size > 0 );
102
103     new_pt = mem_get( size );
104
105     memcpy( new_pt, old_pt, size );
106
107     return new_pt;
108 }
109
110
111 void mem_free( void *pt )
112 {
113     /* Martin A. Hansen, May 2008 */
114
115     /* Free memory from a given pointer. */
116
117     void **ppt = ( void ** ) pt;
118     void *p = *ppt;
119
120     if ( p != NULL )
121     {
122         free( p );
123
124         p = NULL;
125     }
126
127     *ppt = NULL;
128      pt  = NULL;
129 }
130