diff options
-rw-r--r-- | include/langinfo.h | 7 | ||||
-rw-r--r-- | libc/misc/locale/locale.c | 11 | ||||
-rw-r--r-- | libc/misc/time/time.c | 16 |
3 files changed, 19 insertions, 15 deletions
diff --git a/include/langinfo.h b/include/langinfo.h index ed38da808..837a87b83 100644 --- a/include/langinfo.h +++ b/include/langinfo.h @@ -606,7 +606,7 @@ extern char *nl_langinfo (nl_item __item) __THROW; #ifdef __UCLIBC_HAS_XLOCALE__ -#ifdef __USE_GNU +#ifdef __USE_GNU /* This interface is for the extended locale model. See <locale.h> for more information. */ @@ -614,12 +614,7 @@ extern char *nl_langinfo (nl_item __item) __THROW; # include <xlocale.h> /* Just like nl_langinfo but get the information from the locale object L. */ -#ifdef __UCLIBC_MJN3_ONLY__ -#warning "mjn3 FIXME: nl_langinfo_l has a prototype but isn't defined." -#endif extern char *nl_langinfo_l (nl_item __item, __locale_t l); -extern char *__nl_langinfo_l (nl_item __item, __locale_t l); - #endif #endif diff --git a/libc/misc/locale/locale.c b/libc/misc/locale/locale.c index b73ffa3dd..bf0628ee1 100644 --- a/libc/misc/locale/locale.c +++ b/libc/misc/locale/locale.c @@ -1002,7 +1002,7 @@ static const unsigned char nl_data[C_LC_ALL + 1 + 90 + 320] = { ']', '\x00', '^', '[', 'n', 'N', ']', '\x00', }; -char *nl_langinfo(nl_item item) +char attribute_hidden *__nl_langinfo(nl_item item) { unsigned int c; unsigned int i; @@ -1015,21 +1015,25 @@ char *nl_langinfo(nl_item item) } return (char *) cat_start; /* Conveniently, this is the empty string. */ } +strong_alias(__nl_langinfo,nl_langinfo) #else /* __LOCALE_C_ONLY */ #if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) -char *nl_langinfo(nl_item item) +extern char *__nl_langinfo_l (nl_item __item, __locale_t l) attribute_hidden; + +char attribute_hidden *__nl_langinfo(nl_item item) { return __nl_langinfo_l(item, __UCLIBC_CURLOCALE); } +strong_alias(__nl_langinfo,nl_langinfo) #else /* defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) */ static const char empty[] = ""; -char *__XL(nl_langinfo)(nl_item item __LOCALE_PARAM ) +char attribute_hidden *__UCXL(nl_langinfo)(nl_item item __LOCALE_PARAM ) { unsigned int c = _NL_ITEM_CATEGORY(item); unsigned int i = _NL_ITEM_INDEX(item); @@ -1041,6 +1045,7 @@ char *__XL(nl_langinfo)(nl_item item __LOCALE_PARAM ) return (char *) empty; } +__UCXL_ALIAS(nl_langinfo) #endif /* defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) */ diff --git a/libc/misc/time/time.c b/libc/misc/time/time.c index e9ca07e4b..fac85638e 100644 --- a/libc/misc/time/time.c +++ b/libc/misc/time/time.c @@ -152,6 +152,8 @@ extern long int __strtol (__const char *__restrict __nptr, char **__restrict __endptr, int __base) __THROW __nonnull ((1)) __wur attribute_hidden; +extern char *__nl_langinfo (nl_item __item) __THROW attribute_hidden; + #ifdef __UCLIBC_HAS_XLOCALE__ #include <xlocale.h> extern long int __strtol_l (__const char *__restrict __nptr, @@ -168,6 +170,8 @@ extern size_t __strftime_l (char *__restrict __s, size_t __maxsize, extern char *__strptime_l (__const char *__restrict __s, __const char *__restrict __fmt, struct tm *__tp, __locale_t __loc) __THROW attribute_hidden; + +extern char *__nl_langinfo_l (nl_item __item, __locale_t l) attribute_hidden; #endif #ifndef __isleap @@ -1052,7 +1056,7 @@ size_t attribute_hidden __UCXL(strftime)(char *__restrict s, size_t maxsize, + (code & 7); #ifdef ENABLE_ERA_CODE if ((mod & NO_E_MOD) /* Actually, this means E modifier present. */ - && (*(o = __XL(nl_langinfo)(_NL_ITEM(LC_TIME, + && (*(o = __UCXL(nl_langinfo)(_NL_ITEM(LC_TIME, (int)(((unsigned char *)p)[4])) __LOCALE_ARG ))) @@ -1061,7 +1065,7 @@ size_t attribute_hidden __UCXL(strftime)(char *__restrict s, size_t maxsize, goto LOOP; } #endif - p = __XL(nl_langinfo)(_NL_ITEM(LC_TIME, + p = __UCXL(nl_langinfo)(_NL_ITEM(LC_TIME, (int)(*((unsigned char *)p))) __LOCALE_ARG ); @@ -1238,7 +1242,7 @@ size_t attribute_hidden __UCXL(strftime)(char *__restrict s, size_t maxsize, if ((code & MASK_SPEC) == STRING_SPEC) { o_count = SIZE_MAX; field_val += spec[STRINGS_NL_ITEM_START + (code & 0xf)]; - o = __XL(nl_langinfo)(_NL_ITEM(LC_TIME, field_val) __LOCALE_ARG ); + o = __UCXL(nl_langinfo)(_NL_ITEM(LC_TIME, field_val) __LOCALE_ARG ); } else { o_count = ((i >> 1) & 3) + 1; o = buf + o_count; @@ -1499,7 +1503,7 @@ char attribute_hidden *__UCXL(strptime)(const char *__restrict buf, const char * + (code & 7); #ifdef ENABLE_ERA_CODE if ((mod & NO_E_MOD) /* Actually, this means E modifier present. */ - && (*(o = __XL(nl_langinfo)(_NL_ITEM(LC_TIME, + && (*(o = __UCXL(nl_langinfo)(_NL_ITEM(LC_TIME, (int)(((unsigned char *)p)[4])) __LOCALE_ARG ))) @@ -1508,7 +1512,7 @@ char attribute_hidden *__UCXL(strptime)(const char *__restrict buf, const char * goto LOOP; } #endif - p = __XL(nl_langinfo)(_NL_ITEM(LC_TIME, + p = __UCXL(nl_langinfo)(_NL_ITEM(LC_TIME, (int)(*((unsigned char *)p))) __LOCALE_ARG ); goto LOOP; @@ -1523,7 +1527,7 @@ char attribute_hidden *__UCXL(strptime)(const char *__restrict buf, const char * /* Go backwards to check full names before abreviations. */ do { --j; - o = __XL(nl_langinfo)(i+j __LOCALE_ARG); + o = __UCXL(nl_langinfo)(i+j __LOCALE_ARG); if (!__UCXL(strncasecmp)(buf,o,__strlen(o) __LOCALE_ARG) && *o) { do { /* Found a match. */ ++buf; |