clean up bcm bases and add primecell peripheral defines
[AROS.git] / compiler / clib / free.c
blob8195554f026b8f3da39ae5ba3c5cc12ac1e4d8dd
1 /*
2 Copyright © 1995-2012, The AROS Development Team. All rights reserved.
3 $Id$
5 C99 function free().
6 */
8 #include "__arosc_privdata.h"
9 #include "__memalign.h"
11 #include <exec/memory.h>
12 #include <proto/exec.h>
14 /*****************************************************************************
16 NAME */
17 #include <stdlib.h>
19 void free (
21 /* SYNOPSIS */
22 void * memory)
24 /* FUNCTION
25 Return memory allocated with malloc() or a similar function to the
26 system.
28 INPUTS
29 memory - The result of the previous call to malloc(), etc. or
30 NULL.
32 RESULT
33 None.
35 NOTES
36 This function must not be used in a shared library or in a threaded
37 application.
39 EXAMPLE
41 BUGS
43 SEE ALSO
44 malloc()
46 INTERNALS
48 ******************************************************************************/
50 struct aroscbase *aroscbase = __aros_getbase_aroscbase();
51 if (memory)
53 unsigned char *mem;
54 size_t size;
56 mem = ((UBYTE *)memory) - AROS_ALIGN(sizeof(size_t));
58 size = *((size_t *) mem);
59 if (size == MEMALIGN_MAGIC)
60 free(((void **) mem)[-1]);
61 else {
62 size += AROS_ALIGN(sizeof(size_t));
63 FreePooled (aroscbase->acb_mempool, mem, size);
67 } /* free */