Files
jsix/src/libraries/libc/include/stdlib.h
Justin C. Miller bab2dd5c69 [libc] Change exit status from int to long
Slightly breaking the C standard, but in a way that's unlikely to break
things - allow 64-bit process exit status codes.
2024-04-27 12:59:02 -07:00

109 lines
3.2 KiB
C

#pragma once
/** \file stdlib.h
* General utilities
*
* This file is part of the C standard library for the jsix operating
* system.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include <__j6libc/null.h>
#include <__j6libc/restrict.h>
#include <__j6libc/size_t.h>
#include <__j6libc/wchar_t.h>
#ifdef __cplusplus
extern "C" {
#endif
// Numeric conversion functions
//
double atof( const char *nptr );
int atoi( const char *nptr );
long atol( const char *nptr );
long long atoll( const char *nptr );
double strtod( const char * restrict nptr, char ** restrict endptr );
float strtof( const char * restrict nptr, char ** restrict endptr );
long double strtold( const char * restrict nptr, char ** restrict endptr );
long strtol( const char * restrict nptr, char ** restrict endptr, int base );
long long strtoll( const char * restrict nptr, char ** restrict endptr, int base );
unsigned long strtoul( const char * restrict nptr, char ** restrict endptr, int base );
unsigned long long strtoull( const char * restrict nptr, char ** restrict endptr, int base );
// Pseudo-random sequence generation functions
//
#define RAND_MAX 0
int rand( void );
void srand( unsigned int seed );
// Memory management functions
//
void *aligned_alloc( size_t alignment, size_t size );
void *calloc( size_t nmemb, size_t size);
void free( void *ptr );
void *malloc( size_t size );
void *realloc( void *ptr, size_t size );
// Bonus functions from dlmalloc
void* realloc_in_place( void *ptr, size_t size );
void* memalign(size_t, size_t);
int posix_memalign(void**, size_t, size_t);
void* valloc(size_t);
void* pvalloc(size_t);
// Communication with the environment
//
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 127
_Noreturn void abort( void );
int atexit( void (*func)(void) );
int at_quick_exit( void (*func)(void) );
_Noreturn void exit( long status );
_Noreturn void _Exit( long status );
char *getenv( const char *name );
_Noreturn void quick_exit( long status );
int system( const char *string );
// Searching and sorting utilities
//
typedef int (*__cmp)( const void *, const void *);
void *bsearch( const void *key, const void *base, size_t nmemb, size_t size, __cmp compar );
void qsort( const void *base, size_t nmemb, size_t size, __cmp compar );
// Integer arithmetic functions
//
struct div_t { int quot; int rem; };
struct ldiv_t { long quot; long rem; };
struct lldiv_t { long long quot; long long rem; };
int abs( int j );
long labs( long j );
long long llabs( long long j );
struct div_t div( int numer, int denom );
struct ldiv_t ldiv( long numer, long denom );
struct lldiv_t lldiv( long long numer, long long denom );
// Multibyte / wide character conversion functions
//
#define MB_CUR_MAX SIZE_C(4)
int mblen( const char *s, size_t n );
int mbtowc( wchar_t * restrict pwc, const char * restrict s, size_t n );
int wctomb( char *s, wchar_t wc );
int mbstowcs( wchar_t * restrict pwcs, const char * restrict s, size_t n );
int wcstombs( char * restrict s, const wchar_t * restrict pwcs, size_t n );
#ifdef __cplusplus
} // extern "C"
#endif