]> pd.if.org Git - pdclib/blob - functions/stdlib/free.c
Re-import from Subversion.
[pdclib] / functions / stdlib / free.c
1 /* ----------------------------------------------------------------------------
2  * $Id$
3  * ----------------------------------------------------------------------------
4  * Public Domain C Library - http://pdclib.sourceforge.net
5  * This code is Public Domain. Use, modify, and redistribute at will.
6  * --------------------------------------------------------------------------*/
7
8 void free( void * ptr ) { /* TODO */ };
9
10 /* Thomas "Beyond Infinity" Kreitner's code - unchecked, unoptimized
11 {
12     chunk_t * chunk;
13     chunk_t * prev_chunk;
14     chunk = used_mem.start;
15     do
16     {
17         prev_chunk = chunk;
18         chunk = chunk->next;
19     } while ( ( chunk != NULL ) && ( chunk->address != ptr ) );
20     if ( chunk->address == ptr )
21     {
22     if( used_mem.start->next->next == NULL )
23     {
24         /* used_mem list has only one entry */
25         chunk = used_mem.start->next;
26         used_mem.last = used_mem.start;
27     }
28     else if ( chunk == used_mem.last )
29     {
30         /* chunk is the last element of used_mem list */
31         prev_chunk->next = NULL;
32         used_mem.last = prev_chunk;
33     }
34     else
35     {
36         /* chunk is neither only nor last in the used_mem list */
37         prev_chunk->next = prev_chunk->next->next;
38     }
39     chunk->next = NULL;
40     free_mem.last->next = chunk;
41     free_mem.last = chunk;
42     return chunk;
43     }
44     else
45     {
46         return NULL;
47     }
48 }