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