mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
Slightly breaking the C standard, but in a way that's unlikely to break things - allow 64-bit process exit status codes.
109 lines
3.2 KiB
C
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
|