about summary refs log tree commit diff
path: root/locale
diff options
context:
space:
mode:
Diffstat (limited to 'locale')
-rw-r--r--locale/duplocale.c2
-rw-r--r--locale/freelocale.c2
-rw-r--r--locale/langinfo.h24
-rw-r--r--locale/programs/ld-ctype.c5
-rw-r--r--locale/programs/locale.c3
-rw-r--r--locale/setlocale.c8
6 files changed, 31 insertions, 13 deletions
diff --git a/locale/duplocale.c b/locale/duplocale.c
index b3aa4af68c..2dcc0f5b02 100644
--- a/locale/duplocale.c
+++ b/locale/duplocale.c
@@ -45,7 +45,7 @@ __duplocale (__locale_t dataset)
       for (cnt = 0; cnt < LC_ALL; ++cnt)
 	{
 	  result->__locales[cnt] = dataset->__locales[cnt];
-	  if (result->__locales[cnt]->usage_count != MAX_USAGE_COUNT)
+	  if (result->__locales[cnt]->usage_count < MAX_USAGE_COUNT)
 	    ++result->__locales[cnt]->usage_count;
 	}
     }
diff --git a/locale/freelocale.c b/locale/freelocale.c
index a09a744ebf..3cfa5276ca 100644
--- a/locale/freelocale.c
+++ b/locale/freelocale.c
@@ -38,7 +38,7 @@ __freelocale (__locale_t dataset)
   __libc_lock_lock (__libc_setlocale_lock);
 
   for (cnt = 0; cnt < LC_ALL; ++cnt)
-    if (dataset->__locales[cnt]->usage_count != MAX_USAGE_COUNT)
+    if (dataset->__locales[cnt]->usage_count != UNDELETABLE)
       /* We can remove the data.  */
       _nl_remove_locale (cnt, dataset->__locales[cnt]);
 
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 81696479e5..8cdb104c0d 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -1,5 +1,5 @@
-/* nl_langinfo -- Access to locale-dependent parameters.
-   Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+/* Access to locale-dependent parameters.
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -22,6 +22,10 @@
 
 #include <locale.h>		/* Define the LC_* category names.  */
 
+/* Get the type definition.  */
+#include <nl_types.h>
+
+
 __BEGIN_DECLS
 
 /* Construct an `nl_item' value for `nl_langinfo' from a locale category
@@ -36,7 +40,7 @@ __BEGIN_DECLS
 
 
 /* Enumeration of locale items that can be queried with `nl_langinfo'.  */
-typedef enum
+enum
 {
   /* LC_TIME category: date and time formatting.  */
 
@@ -153,6 +157,9 @@ typedef enum
   _NL_CTYPE_WIDTH,
   _NL_CTYPE_MB_CUR_MAX,
   _NL_CTYPE_CODESET_NAME,
+#ifdef __USE_UNIX98
+  CODESET = _NL_CTYPE_CODESET_NAME,
+#endif
   _NL_NUM_LC_CTYPE,
 
   /* LC_MONETARY category: formatting of monetary quantities.
@@ -160,6 +167,9 @@ typedef enum
      defined in <locale.h>.  */
   INT_CURR_SYMBOL = _NL_ITEM (LC_MONETARY, 0),
   CURRENCY_SYMBOL,
+#ifdef __USE_UNIX98
+  CRNCYSTR = CURRENCY_SYMBOL,
+#endif
   MON_DECIMAL_POINT,
   MON_THOUSANDS_SEP,
   MON_GROUPING,
@@ -178,7 +188,13 @@ typedef enum
   /* LC_NUMERIC category: formatting of numbers.
      These also correspond to members of `struct lconv'; see <locale.h>.  */
   DECIMAL_POINT = _NL_ITEM (LC_NUMERIC, 0),
+#ifdef __USE_UNIX98
+  RADIXCHAR = DECIMAL_POINT,
+#endif
   THOUSANDS_SEP,
+#ifdef __USE_UNIX98
+  THOUSEP = THOUSANDS_SEP,
+#endif
   GROUPING,
   _NL_NUM_LC_NUMERIC,
 
@@ -190,7 +206,7 @@ typedef enum
 
   /* This marks the highest value used.  */
   _NL_NUM
-} nl_item;
+};
 
 
 /* Return the current locale's value for ITEM.
diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
index 0a5e4eebf1..f2ad46f092 100644
--- a/locale/programs/ld-ctype.c
+++ b/locale/programs/ld-ctype.c
@@ -492,8 +492,9 @@ ctype_output (struct localedef_t *locale, struct charset_t *charset,
 	    else
 	      {
 		iov[2 + elem + offset].iov_base = alloca ((total + 3) & ~3);
-		memcpy (iov[2 + elem + offset].iov_base, ctype->codeset_name,
-			total);
+		memset (mempcpy (iov[2 + elem + offset].iov_base,
+				 ctype->codeset_name, total),
+			'\0', 4 - (total & 3));
 		total = (total + 3) & ~3;
 	      }
 	    iov[2 + elem + offset].iov_len = total;
diff --git a/locale/programs/locale.c b/locale/programs/locale.c
index e09e6f1e37..93818e02e2 100644
--- a/locale/programs/locale.c
+++ b/locale/programs/locale.c
@@ -657,7 +657,8 @@ show_info (const char *name)
 	  break;
 	case word:
 	  {
-	    unsigned int val = (unsigned int) nl_langinfo (item->item_id);
+	    unsigned int val =
+	      (unsigned int) (unsigned long int) nl_langinfo (item->item_id);
 	    printf ("%d", val);
 	  }
 	  break;
diff --git a/locale/setlocale.c b/locale/setlocale.c
index 42c1e5033a..33599c64db 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -312,8 +312,8 @@ setlocale (int category, const char *locale)
 
 	  /* We must not simply free a global locale since we have no
 	     control over the usage.  So we mark it as un-deletable.  */
-	  if (newdata[category]->usage_count != MAX_USAGE_COUNT)
-	    newdata[category]->usage_count = MAX_USAGE_COUNT;
+	  if (newdata[category]->usage_count != UNDELETABLE)
+	    newdata[category]->usage_count = UNDELETABLE;
 	}
 
       /* Create new composite name.  */
@@ -362,8 +362,8 @@ setlocale (int category, const char *locale)
 
 	     Note: do ont remove the `if', it's necessary to copy with
 	     the builtin locale data.  */
-	  if (newdata->usage_count != MAX_USAGE_COUNT)
-	    newdata->usage_count = MAX_USAGE_COUNT;
+	  if (newdata->usage_count != UNDELETABLE)
+	    newdata->usage_count = UNDELETABLE;
 	}
 
       /* Create new composite name.  */