Browse Source

Do __nl_langinfo, partly sync header w/ glibc, add missing nl_langinfo_l, change users to hidden version

Peter S. Mazinger 18 years ago
parent
commit
e81e139ad0
3 changed files with 19 additions and 15 deletions
  1. 1 6
      include/langinfo.h
  2. 8 3
      libc/misc/locale/locale.c
  3. 10 6
      libc/misc/time/time.c

+ 1 - 6
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
 

+ 8 - 3
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) */
 

+ 10 - 6
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;