1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <locale.h> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <langinfo.h> 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stdio.h> 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stdlib.h> 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <wctype.h> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string.h> 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stdint.h> 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const char *_empty_str = ""; 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const char *_C_name = "C"; 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic wchar_t* _ToWChar(const char* buf, wchar_t *wbuf, size_t wbufSize) { 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t *wcur = wbuf; 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t *wend = wbuf + wbufSize - 1; 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (; wcur != wend && *buf != 0; ++buf, ++wcur) 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *wcur = *buf; 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *wcur = 0; 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return wbuf; 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_ctype 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_numeric 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_time 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_collate 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_monetary 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_messages 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott locale_t __cloc; 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_init() 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{} 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_final() 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{} 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_ctype *_Locale_ctype_create(const char *nm, struct _Locale_name_hint* hint, 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_ctype*)newlocale(LC_CTYPE_MASK, nm, NULL); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_codecvt *_Locale_codecvt_create(const char *nm, struct _Locale_name_hint* hint, 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Glibc do not support multibyte manipulation for the moment, it simply implements "C". 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (nm[0] == 'C' && nm[1] == 0) 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return (struct _Locale_codecvt*)0x01; } 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_NO_PLATFORM_SUPPORT; return 0; 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_numeric *_Locale_numeric_create(const char *nm, struct _Locale_name_hint* hint, 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_numeric*)newlocale(LC_NUMERIC_MASK, nm, NULL); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_time *_Locale_time_create(const char *nm, struct _Locale_name_hint* hint, 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_time*)newlocale(LC_TIME_MASK, nm, NULL); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_collate *_Locale_collate_create(const char *nm, struct _Locale_name_hint* hint, 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_collate*)newlocale(LC_COLLATE_MASK, nm, NULL); 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_monetary *_Locale_monetary_create(const char *nm, struct _Locale_name_hint* hint, 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_monetary*)newlocale(LC_MONETARY_MASK, nm, NULL); 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_messages *_Locale_messages_create(const char *nm, struct _Locale_name_hint* hint, 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int *__err_code) { 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__err_code = _STLP_LOC_UNKNOWN_NAME; 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (struct _Locale_messages*)newlocale(LC_MESSAGES_MASK, nm, NULL); 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott try to see locale category LC should be used from environment; 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott according POSIX, the order is 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1. LC_ALL 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 2. category (LC_CTYPE, LC_NUMERIC, ... ) 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3. LANG 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott If set nothing, return "C" (this really implementation-specific). 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott*/ 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic const char *_Locale_aux_default( const char *LC, char *nm ) 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *name = getenv( "LC_ALL" ); 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ( name != NULL && *name != 0 ) { 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return name; 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott name = getenv( LC ); 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ( name != NULL && *name != 0 ) { 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return name; 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott name = getenv( "LANG" ); 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ( name != NULL && *name != 0 ) { 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return name; 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _C_name; 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_ctype_default( char *nm ) 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_CTYPE", nm ); 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_numeric_default( char *nm ) 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_NUMERIC", nm ); 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_time_default( char *nm ) 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_TIME", nm ); 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_collate_default( char *nm ) 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_COLLATE", nm ); 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_monetary_default( char *nm ) 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_MONETARY", nm ); 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_messages_default( char *nm ) 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _Locale_aux_default( "LC_MESSAGES", nm ); 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_ctype_name( const struct _Locale_ctype *__loc, char *buf ) 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_CTYPE]; 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_codecvt_name( const struct _Locale_codecvt *__loc, char *buf ) 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _C_name; 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_numeric_name( const struct _Locale_numeric *__loc, char *buf ) 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_NUMERIC]; 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_time_name( const struct _Locale_time *__loc, char *buf ) 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_TIME]; 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_collate_name( const struct _Locale_collate *__loc, char *buf ) 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_COLLATE]; 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_monetary_name( const struct _Locale_monetary *__loc, char *buf ) 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_MONETARY]; 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_messages_name( const struct _Locale_messages *__loc, char *buf ) 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__names[LC_MESSAGES]; 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_ctype_destroy( struct _Locale_ctype *__loc ) 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_codecvt_destroy( struct _Locale_codecvt *__loc ) 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{} 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_numeric_destroy( struct _Locale_numeric *__loc ) 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_time_destroy( struct _Locale_time *__loc ) 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_collate_destroy( struct _Locale_collate *__loc ) 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_monetary_destroy( struct _Locale_monetary *__loc ) 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_messages_destroy( struct _Locale_messages* __loc ) 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ freelocale((locale_t)__loc); } 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * locale loc expected either locale name indeed (platform-specific) 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or string like "LC_CTYPE=LocaleNameForCType;LC_NUMERIC=LocaleNameForNum;" 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstatic char const*__Extract_locale_name( const char *loc, const char *category, char *buf ) 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *expr; 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t len_name; 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if( loc[0]=='L' && loc[1]=='C' && loc[2]=='_') { 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott expr = strstr( (char*)loc, category ); 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ( expr == NULL ) 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return NULL; /* Category not found. */ 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ++expr; 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott len_name = strcspn( expr, ";" ); 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott len_name = len_name >= _Locale_MAX_SIMPLE_NAME ? _Locale_MAX_SIMPLE_NAME - 1 : len_name; 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott strncpy( buf, expr, len_name ); 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buf[len_name] = 0; 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return buf; 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return loc; 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_ctype_name(const char *loc, char *buf, 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_CTYPE=", buf ); } 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_numeric_name(const char *loc, char *buf, 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_NUMERIC=", buf ); } 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_time_name(const char *loc, char *buf, 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_TIME=", buf ); } 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_collate_name(const char *loc, char *buf, 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_COLLATE=", buf ); } 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_monetary_name(const char *loc, char *buf, 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_MONETARY=", buf ); } 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar const*_Locale_extract_messages_name(const char *loc, char *buf, 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott struct _Locale_name_hint* hint, int *__err_code) 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return __Extract_locale_name( loc, "LC_MESSAGES=", buf ); } 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_ctype_hint(struct _Locale_ctype* ctype) 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_numeric_hint(struct _Locale_numeric* numeric) 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_time_hint(struct _Locale_time* time) 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_collate_hint(struct _Locale_collate* collate) 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_monetary_hint(struct _Locale_monetary* monetary) 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct _Locale_name_hint* _Locale_get_messages_hint(struct _Locale_messages* messages) 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return 0; } 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* ctype */ 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst _Locale_mask_t *_Locale_ctype_table( struct _Locale_ctype *__loc ) 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* return table with masks (upper, lower, alpha, etc.) */ 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STATIC_ASSERT( sizeof(_Locale_mask_t) == sizeof(((locale_t)__loc)->__ctype_b[0]) ) 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ((locale_t)__loc)->__ctype_b; 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_toupper( struct _Locale_ctype *__loc, int c ) 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return ((locale_t)__loc)->__ctype_toupper[c]; } 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_tolower( struct _Locale_ctype *__loc, int c ) 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return ((locale_t)__loc)->__ctype_tolower[c]; } 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Locale_mask_t _WLocale_ctype( struct _Locale_ctype *__loc, wint_t wc, _Locale_mask_t __mask ) 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Locale_mask_t ret = 0; 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_ALPHA) != 0 && iswalpha_l(wc, (locale_t)__loc)) 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_ALPHA; 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_CNTRL) != 0 && iswcntrl_l(wc, (locale_t)__loc)) 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_CNTRL; 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_DIGIT) != 0 && iswdigit_l(wc, (locale_t)__loc)) 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_DIGIT; 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_PRINT) != 0 && iswprint_l(wc, (locale_t)__loc)) 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_PRINT; 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_PUNCT) != 0 && iswpunct_l(wc, (locale_t)__loc)) 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_PUNCT; 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_SPACE) != 0 && iswspace_l(wc, (locale_t)__loc)) 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_SPACE; 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_XDIGIT) != 0 && iswxdigit_l(wc, (locale_t)__loc)) 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_XDIGIT; 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_UPPER) != 0 && iswupper_l(wc, (locale_t)__loc)) 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_UPPER; 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if ((__mask & _Locale_LOWER) != 0 && iswlower_l(wc, (locale_t)__loc)) 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret |= _Locale_LOWER; 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ret; 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwint_t _WLocale_tolower( struct _Locale_ctype *__loc, wint_t c ) 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return towlower_l( c, ((locale_t)__loc) ); 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwint_t _WLocale_toupper( struct _Locale_ctype *__loc, wint_t c ) 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return towupper_l( c, ((locale_t)__loc) ); 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_mb_cur_max( struct _Locale_codecvt * lcodecvt) { return 1; } 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_mb_cur_min( struct _Locale_codecvt * lcodecvt) { return 1; } 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_is_stateless( struct _Locale_codecvt * lcodecvt) { return 1; } 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_mbtowc(struct _Locale_codecvt *lcodecvt, 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t *to, 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *from, size_t n, 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott mbstate_t *st) 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ *to = *from; return 1; } 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_wctomb(struct _Locale_codecvt *lcodecvt, 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *to, size_t n, 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t c, 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott mbstate_t *st) 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ *to = (char)c; return 1; } 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_unshift(struct _Locale_codecvt *lcodecvt, 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott mbstate_t *st, 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *buf, size_t n, char ** next) 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ *next = buf; return 0; } 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Collate */ 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_strcmp(struct _Locale_collate * __loc, 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *s1, size_t n1, 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *s2, size_t n2) { 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int ret = 0; 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char buf1[64], buf2[64]; 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while (n1 > 0 || n2 > 0) { 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t bufsize1 = n1 < 63 ? n1 : 63; 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t bufsize2 = n2 < 63 ? n2 : 63; 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott strncpy(buf1, s1, bufsize1); buf1[bufsize1] = 0; 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott strncpy(buf2, s2, bufsize2); buf2[bufsize2] = 0; 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret = strcoll_l(buf1, buf2, (locale_t)__loc); 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (ret != 0) return ret; 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott s1 += bufsize1; n1 -= bufsize1; 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott s2 += bufsize2; n2 -= bufsize2; 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ret; 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_WCHAR_T) 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _WLocale_strcmp(struct _Locale_collate *__loc, 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *s1, size_t n1, 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *s2, size_t n2) { 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int ret = 0; 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t buf1[64], buf2[64]; 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while (n1 > 0 || n2 > 0) { 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t bufsize1 = n1 < 63 ? n1 : 63; 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t bufsize2 = n2 < 63 ? n2 : 63; 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wcsncpy(buf1, s1, bufsize1); buf1[bufsize1] = 0; 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wcsncpy(buf2, s2, bufsize2); buf2[bufsize2] = 0; 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ret = wcscoll_l(buf1, buf2, (locale_t)__loc); 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (ret != 0) return ret; 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott s1 += bufsize1; n1 -= bufsize1; 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott s2 += bufsize2; n2 -= bufsize2; 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return ret; 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _Locale_strxfrm(struct _Locale_collate *__loc, 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *dest, size_t dest_n, 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *src, size_t src_n ) 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char *real_src; 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott char *buf = NULL; 409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t result; 410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (src_n == 0) 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (dest != NULL) dest[0] = 0; 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return 0; 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (src[src_n] != 0) { 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buf = malloc(src_n + 1); 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott strncpy(buf, src, src_n); 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buf[src_n] = 0; 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott real_src = buf; 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott real_src = src; 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott result = strxfrm_l(dest, real_src, dest_n, (locale_t)__loc); 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (buf != NULL) free(buf); 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return result; 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_WCHAR_T 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottsize_t _WLocale_strxfrm( struct _Locale_collate *__loc, 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t *dest, size_t dest_n, 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *src, size_t src_n ) 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const wchar_t *real_src; 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wchar_t *buf = NULL; 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t result; 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (src_n == 0) 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (dest != NULL) dest[0] = 0; 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return 0; 443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (src[src_n] != 0) { 445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buf = malloc((src_n + 1) * sizeof(wchar_t)); 446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott wcsncpy(buf, src, src_n); 447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott buf[src_n] = 0; 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott real_src = buf; 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott real_src = src; 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott result = wcsxfrm_l(dest, real_src, dest_n, (locale_t)__loc); 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (buf != NULL) free(buf); 454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return result; 455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Numeric */ 460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_decimal_point(struct _Locale_numeric *__loc) 462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(RADIXCHAR, (locale_t)__loc)); 464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_thousands_sep(struct _Locale_numeric *__loc) 467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(THOUSEP, (locale_t)__loc)); 469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char* _Locale_grouping(struct _Locale_numeric *__loc) 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (_Locale_thousands_sep(__loc) != 0 ) ? (nl_langinfo_l(GROUPING, (locale_t)__loc)) : _empty_str; 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_true(struct _Locale_numeric *__loc) 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(YESSTR, (locale_t)__loc); 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_false(struct _Locale_numeric *__loc) 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(NOSTR, (locale_t)__loc); 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_decimal_point(struct _Locale_numeric *__loc) 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (wchar_t)_Locale_decimal_point(__loc); } 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_thousands_sep(struct _Locale_numeric *__loc) 490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (wchar_t)_Locale_thousands_sep(__loc); } 491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_true(struct _Locale_numeric *__loc, wchar_t *buf, size_t bufSize) 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_true(__loc), buf, bufSize); } 493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_false(struct _Locale_numeric *__loc, wchar_t *buf, size_t bufSize) 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_false(__loc), buf, bufSize); } 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Monetary */ 498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_int_curr_symbol(struct _Locale_monetary *__loc) 500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(INT_CURR_SYMBOL, (locale_t)__loc); 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_currency_symbol(struct _Locale_monetary *__loc) 505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(CURRENCY_SYMBOL, (locale_t)__loc); 507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_mon_decimal_point(struct _Locale_monetary * __loc) 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(MON_DECIMAL_POINT,(locale_t)__loc)); 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_mon_thousands_sep(struct _Locale_monetary *__loc) 515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(MON_THOUSANDS_SEP, (locale_t)__loc)); 517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T 520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_int_curr_symbol(struct _Locale_monetary *__loc, wchar_t *buf, size_t bufSize) 521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_int_curr_symbol(__loc), buf, bufSize); } 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_currency_symbol(struct _Locale_monetary *__loc, wchar_t *buf, size_t bufSize) 523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_currency_symbol(__loc), buf, bufSize); } 524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_mon_decimal_point(struct _Locale_monetary * __loc) 525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (wchar_t)_Locale_mon_decimal_point(__loc); } 526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottwchar_t _WLocale_mon_thousands_sep(struct _Locale_monetary * __loc) 527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (wchar_t)_Locale_mon_thousands_sep(__loc); } 528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_positive_sign(struct _Locale_monetary *__loc, wchar_t *buf, size_t bufSize) 529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_positive_sign(__loc), buf, bufSize); } 530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_negative_sign(struct _Locale_monetary *__loc, wchar_t *buf, size_t bufSize) 531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_negative_sign(__loc), buf, bufSize); } 532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_mon_grouping(struct _Locale_monetary *__loc) 535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (_Locale_mon_thousands_sep( __loc ) != 0 ) ? nl_langinfo_l(MON_GROUPING, (locale_t)__loc) : _empty_str; 537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_positive_sign(struct _Locale_monetary *__loc) 540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(POSITIVE_SIGN, (locale_t)__loc); 542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_negative_sign(struct _Locale_monetary *__loc) 545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(NEGATIVE_SIGN, (locale_t)__loc); 547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_int_frac_digits(struct _Locale_monetary *__loc) 550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* We are forced to manually handled the "C" locale for consistency with 552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * the default implementation in STLport. */ 553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char* lname = ((locale_t)__loc)->__names[LC_MONETARY]; 554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (lname[0] == 'C' && lname[1] == 0) 555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return 0; 556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(INT_FRAC_DIGITS, (locale_t)__loc)); 557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 558e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 559e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottchar _Locale_frac_digits(struct _Locale_monetary *__loc) 560e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 561e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* We are forced to manually handled the "C" locale for consistency with 562e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * the default implementation in STLport. */ 563e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char* lname = ((locale_t)__loc)->__names[LC_MONETARY]; 564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (lname[0] == 'C' && lname[1] == 0) 565e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return 0; 566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(FRAC_DIGITS, (locale_t)__loc)); 567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 1 if currency_symbol precedes a positive value, 0 if succeeds */ 570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_p_cs_precedes(struct _Locale_monetary *__loc) 571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(P_CS_PRECEDES, (locale_t)__loc)); 573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 1 if a space separates currency_symbol from a positive value. */ 576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_p_sep_by_space(struct _Locale_monetary *__loc) 577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(P_SEP_BY_SPACE, (locale_t)__loc)); 579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 0 Parentheses surround the quantity and currency_symbol 583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 1 The sign string precedes the quantity and currency_symbol 584e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 2 The sign string succeeds the quantity and currency_symbol. 585e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 3 The sign string immediately precedes the currency_symbol. 586e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 4 The sign string immediately succeeds the currency_symbol. 587e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_p_sign_posn(struct _Locale_monetary *__loc) 589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 590e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(P_SIGN_POSN, (locale_t)__loc)); 591e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 592e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 593e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 1 if currency_symbol precedes a negative value, 0 if succeeds */ 594e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_n_cs_precedes(struct _Locale_monetary *__loc) 595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 596e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(N_CS_PRECEDES, (locale_t)__loc)); 597e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 1 if a space separates currency_symbol from a negative value. */ 600e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_n_sep_by_space(struct _Locale_monetary *__loc) 601e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 602e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(N_SEP_BY_SPACE, (locale_t)__loc)); 603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 605e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 0 Parentheses surround the quantity and currency_symbol 607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 1 The sign string precedes the quantity and currency_symbol 608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 2 The sign string succeeds the quantity and currency_symbol. 609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 3 The sign string immediately precedes the currency_symbol. 610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 4 The sign string immediately succeeds the currency_symbol. 611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint _Locale_n_sign_posn(struct _Locale_monetary *__loc) 613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 614e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return *(nl_langinfo_l(N_SIGN_POSN, (locale_t)__loc)); 615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 616e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 617e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 618e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Time */ 619e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_full_monthname(struct _Locale_time *__loc, int _m ) 620e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 621e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(MON_1 + _m, (locale_t)__loc); 622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 623e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 624e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_abbrev_monthname(struct _Locale_time *__loc, int _m ) 625e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 626e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(ABMON_1 + _m, (locale_t)__loc); 627e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 628e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 629e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_full_dayofweek(struct _Locale_time *__loc, int _d ) 630e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 631e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(DAY_1 + _d, (locale_t)__loc); 632e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 633e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 634e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_abbrev_dayofweek(struct _Locale_time *__loc, int _d ) 635e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 636e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(ABDAY_1 + _d, (locale_t)__loc); 637e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 638e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 639e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_d_t_fmt(struct _Locale_time *__loc) 640e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 641e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(D_T_FMT, (locale_t)__loc); 642e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 643e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 644e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_d_fmt(struct _Locale_time *__loc ) 645e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 646e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(D_FMT, (locale_t)__loc); 647e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 648e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 649e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_t_fmt(struct _Locale_time *__loc ) 650e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 651e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(T_FMT, (locale_t)__loc); 652e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 653e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 654e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_long_d_t_fmt(struct _Locale_time *__loc ) 655e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 656e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(ERA_D_T_FMT, (locale_t)__loc); 657e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 658e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 659e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_long_d_fmt(struct _Locale_time *__loc ) 660e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 661e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(ERA_D_FMT, (locale_t)__loc); 662e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 663e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 664e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_am_str(struct _Locale_time *__loc ) 665e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 666e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(AM_STR, (locale_t)__loc); 667e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 668e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 669e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_pm_str(struct _Locale_time* __loc ) 670e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 671e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return nl_langinfo_l(PM_STR, (locale_t)__loc); 672e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 673e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 674e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_NO_WCHAR_T 675e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_full_monthname(struct _Locale_time *__loc, int _m, wchar_t *buf, size_t bufSize) 676e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_full_monthname(__loc, _m), buf, bufSize); } 677e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_abbrev_monthname(struct _Locale_time *__loc, int _m, wchar_t *buf, size_t bufSize) 678e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_abbrev_monthname(__loc, _m), buf, bufSize); } 679e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_full_dayofweek(struct _Locale_time *__loc, int _d, wchar_t *buf, size_t bufSize) 680e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_full_dayofweek(__loc, _d), buf, bufSize); } 681e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_abbrev_dayofweek(struct _Locale_time *__loc, int _d, wchar_t *buf, size_t bufSize) 682e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_abbrev_dayofweek(__loc, _d), buf, bufSize); } 683e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_am_str(struct _Locale_time *__loc, wchar_t *buf, size_t bufSize) 684e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_am_str(__loc), buf, bufSize); } 685e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst wchar_t *_WLocale_pm_str(struct _Locale_time* __loc, wchar_t *buf, size_t bufSize) 686e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _ToWChar(_Locale_pm_str(__loc), buf, bufSize); } 687e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 688e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 689e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Messages */ 690e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 691e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottnl_catd_type _Locale_catopen(struct _Locale_messages *__loc, const char *__cat_name ) 692e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 693e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return catopen( __cat_name, NL_CAT_LOCALE ); 694e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 695e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 696e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid _Locale_catclose(struct _Locale_messages *__loc, nl_catd_type __cat ) 697e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 698e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott catclose( __cat ); 699e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 700e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 701e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst char *_Locale_catgets(struct _Locale_messages *__loc, nl_catd_type __cat, 702e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __setid, int __msgid, const char *dfault) 703e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 704e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return catgets( __cat, __setid, __msgid, dfault ); 705e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 706