/*****************************************************************************/
/* */
-/* stdlib.h */
+/* stdlib.h */
/* */
-/* General utilities */
+/* General utilities */
/* */
/* */
/* */
-/* (C) 1998-2005 Ullrich von Bassewitz */
-/* Römerstrasse 52 */
-/* D-70794 Filderstadt */
-/* EMail: uz@cc65.org */
+/* (C) 1998-2011, Ullrich von Bassewitz */
+/* Roemerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
#endif
/* Standard exit codes */
-#define EXIT_SUCCESS 0
-#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
/* Return type of the div function */
typedef struct {
int quot;
} div_t;
+/* Return type of the ldiv function (which currently doesn't exist) */
+typedef struct {
+ long rem;
+ long quot;
+} ldiv_t;
+
/* Memory management */
void* __fastcall__ malloc (size_t size);
void* __fastcall__ calloc (size_t count, size_t size);
/* Non standard memory management functions */
-void* __fastcall__ _aligned_malloc (size_t size, size_t alignment);
-/* Allocate a block of memory with the given size, which is aligned to a
- * memory address that is a multiple of alignment. alignment MUST NOT be
- * zero and MUST be a power of two, otherwise a call to this function will
- * cause undefined behaviour. The function returns NULL if not enough memory
- * is available to satisfy the request. To free the allocated block, use the
- * free() function.
- */
+#if __CC65_STD__ == __CC65_STD_CC65__
+int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size);
+/* Allocate a block of memory with the given "size", which is aligned to a
+** memory address that is a multiple of "alignment". "alignment" MUST NOT be
+** zero, and MUST be a power of two; otherwise, this function will return
+** EINVAL. The function returns ENOMEM if not enough memory is available
+** to satisfy the request. "memptr" must point to a variable; that variable
+** will return the address of the allocated memory. Use free() to release that
+** allocated block.
+*/
+#endif
void __fastcall__ _heapadd (void* mem, size_t size);
/* Add a block to the heap */
size_t __fastcall__ _heapblocksize (const void* block);
/* Return the size of an allocated block */
-size_t __fastcall__ _heapmemavail (void);
+size_t _heapmemavail (void);
/* Return the total free heap space */
-size_t __fastcall__ _heapmaxavail (void);
+size_t _heapmaxavail (void);
/* Return the size of the largest free block on the heap */
/* Random numbers */
-#define RAND_MAX 0x7FFF
+#define RAND_MAX 0x7FFF
int rand (void);
void __fastcall__ srand (unsigned seed);
void _randomize (void); /* Non-standard */
/* Other standard stuff */
-void abort (void);
+void abort (void) __attribute__ ((noreturn));
int __fastcall__ abs (int val);
long __fastcall__ labs (long val);
int __fastcall__ atoi (const char* s);
long __fastcall__ atol (const char* s);
int __fastcall__ atexit (void (*exitfunc) (void));
void* __fastcall__ bsearch (const void* key, const void* base, size_t n,
- size_t size, int (*cmp) (const void*, const void*));
+ size_t size, int __fastcall__ (* cmp) (const void*, const void*));
div_t __fastcall__ div (int numer, int denom);
-void __fastcall__ exit (int ret);
+void __fastcall__ exit (int ret) __attribute__ ((noreturn));
char* __fastcall__ getenv (const char* name);
void __fastcall__ qsort (void* base, size_t count, size_t size,
- int (*compare) (const void*, const void*));
-int system (const char* s);
+ int __fastcall__ (* compare) (const void*, const void*));
+long __fastcall__ strtol (const char* nptr, char** endptr, int base);
+unsigned long __fastcall__ strtoul (const char* nptr, char** endptr, int base);
+int __fastcall__ system (const char* s);
/* Non-ANSI functions */
void __fastcall__ _swap (void* p, void* q, size_t size);