summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/langinfo.h7
-rw-r--r--libc/misc/locale/locale.c11
-rw-r--r--libc/misc/time/time.c16
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;