Renamed _calloc() to zalloc(), ready to be used as a standalone function.
[gpxe.git] / src / include / stdlib.h
1 #ifndef STDLIB_H
2 #define STDLIB_H
3
4 #include <stdint.h>
5 #include <assert.h>
6
7 /*****************************************************************************
8  *
9  * Numeric parsing
10  *
11  ****************************************************************************
12  */
13
14 extern unsigned long strtoul ( const char *p, char **endp, int base );
15
16 /*****************************************************************************
17  *
18  * Memory allocation
19  *
20  ****************************************************************************
21  */
22
23 extern void * malloc ( size_t size );
24 extern void * realloc ( void *old_ptr, size_t new_size );
25 extern void free ( void *ptr );
26 extern void * zalloc ( size_t len );
27
28 /**
29  * Allocate cleared memory
30  *
31  * @v nmemb             Number of members
32  * @v size              Size of each member
33  * @ret ptr             Allocated memory
34  *
35  * Allocate memory as per malloc(), and zero it.
36  *
37  * This is implemented as a static inline, with the body of the
38  * function in zalloc(), since in most cases @c nmemb will be 1 and
39  * doing the multiply is just wasteful.
40  */
41 static inline void * calloc ( size_t nmemb, size_t size ) {
42         return zalloc ( nmemb * size );
43 }
44
45 /*****************************************************************************
46  *
47  * Random number generation
48  *
49  ****************************************************************************
50  */
51
52 extern long int random ( void );
53 extern void srandom ( unsigned int seed );
54
55 static inline int rand ( void ) {
56         return random();
57 }
58
59 static inline void srand ( unsigned int seed ) {
60         srandom ( seed );
61 }
62
63 /*****************************************************************************
64  *
65  * Miscellaneous
66  *
67  ****************************************************************************
68  */
69
70 extern int system ( const char *command );
71
72 #endif /* STDLIB_H */