char * strerror(int errnum) { if (errnum == 0 || errnum >= _PDCLIB_ERRNO_MAX) { return (char *)"Unknown error"; } else { return _PDCLIB_threadlocale()->_ErrnoStr[errnum]; } }
locale_t uselocale( locale_t newloc ) { locale_t oldloc = _PDCLIB_threadlocale(); if(newloc == LC_GLOBAL_LOCALE) { _PDCLIB_setthreadlocale(NULL); } else if(newloc != NULL) { _PDCLIB_setthreadlocale(newloc); } return oldloc; }
/* TODO: Doing this via a static array is not the way to do it. */ void perror( const char * s ) { if ( ( s != NULL ) && ( s[0] != '\n' ) ) { fprintf( stderr, "%s: ", s ); } if ( errno >= _PDCLIB_ERRNO_MAX ) { fprintf( stderr, "Unknown error\n" ); } else { fprintf( stderr, "%s\n", _PDCLIB_threadlocale()->_ErrnoStr[errno] ); } return; }
int isupper( int c ) { return ( _PDCLIB_threadlocale()->_CType[c].flags & _PDCLIB_CTYPE_UPPER ); }
wint_t towctrans( wint_t wc, wctrans_t trans ) { return _PDCLIB_towctrans_l( wc, trans, _PDCLIB_threadlocale() ); }
int isxdigit( int c ) { return ( _PDCLIB_threadlocale()->_CType[c].flags & _PDCLIB_CTYPE_XDIGT ); }
int isblank( int c ) { return ( _PDCLIB_threadlocale()->_CType[c].flags & _PDCLIB_CTYPE_BLANK ); }
wint_t towupper( wint_t wc ) { return _PDCLIB_towupper_l( wc, _PDCLIB_threadlocale() ); }
/* strxfrm( char *, const char *, size_t ) This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. */ #include <string.h> #ifndef REGTEST #include <_PDCLIB_locale.h> size_t strxfrm( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ) { const _PDCLIB_ctype_t *ctype = _PDCLIB_threadlocale()->_CType; size_t len = strlen( s2 ); if ( len < n ) { /* Cannot use strncpy() here as the filling of s1 with '\0' is not part of the spec. */ while ( n-- && ( *s1++ = ctype[(unsigned char)*s2++].collation ) ); } return len; } #endif #ifdef TEST #include <_PDCLIB_test.h>
int islower(int c) { return (_PDCLIB_threadlocale()->_CType[c].flags & _PDCLIB_CTYPE_LOWER); }
int isalnum( int c ) { return ( _PDCLIB_threadlocale()->_CType[c].flags & ( _PDCLIB_CTYPE_ALPHA | _PDCLIB_CTYPE_DIGIT ) ); }
int ispunct( int c ) { return ( _PDCLIB_threadlocale()->_CType[c].flags & _PDCLIB_CTYPE_PUNCT ); }
int iswctype( wint_t wc, wctype_t desc ) { return _PDCLIB_iswctype_l( wc, desc, _PDCLIB_threadlocale() ); }
struct lconv * localeconv( void ) { return &_PDCLIB_threadlocale()->_Conv; }
int mbsinit( const mbstate_t * ps ) { return _PDCLIB_mbsinit_l(ps, _PDCLIB_threadlocale()); }