This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.18-398-ga7931fc


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  a7931fcfba2a5007021f8d10fffa5f51651ad7b3 (commit)
      from  728dab0e13529ba8778e6ef07e2cc80eddf028b5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a7931fcfba2a5007021f8d10fffa5f51651ad7b3

commit a7931fcfba2a5007021f8d10fffa5f51651ad7b3
Author: Andreas Schwab <schwab@suse.de>
Date:   Mon Nov 11 18:09:18 2013 +0100

    Properly handle unavailable elements in LC_MONETARY category

diff --git a/ChangeLog b/ChangeLog
index 8ecba52..02f1ede 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2013-11-18  Andreas Schwab  <schwab@suse.de>
+
+	* locale/programs/locale.c (show_info) [case byte]: Check for
+	'\377' instead of '\177'.
+	* locale/C-monetary.c (not_available): Always use "\377".
+	* stdlib/strfmon_l.c (__vstrfmon_l): Use -2 as marker for
+	unspecified p_sign_posn and n_sign_posn.  Check for '\377' to
+	detect unavailable sign_posn locale elements.
+	* locale/localeconv.c (__localeconv): For grouping and
+	mon_grouping handle "\177" and "\377" like no grouping.
+	(INT_ELEM): New macro.  Use it to set all numeric members.
+	* locale/programs/ld-monetary.c (monetary_read)
+	<tok_mon_grouping>: Normalize single -1 to the empty string.
+	* locale/programs/ld-numeric.c (numeric_read) <tok_grouping>:
+	Likewise.
+
 2013-11-07  OndÅ?ej Bílka  <neleai@seznam.cz>
 
 	[BZ #16055]
diff --git a/locale/C-monetary.c b/locale/C-monetary.c
index b4ffb16..3246ff5 100644
--- a/locale/C-monetary.c
+++ b/locale/C-monetary.c
@@ -21,11 +21,7 @@
 /* This table's entries are taken from POSIX.2 Table 2-9
    ``LC_MONETARY Category Definition in the POSIX Locale'',
    with additions from ISO 14652, section 4.4.  */
-#ifdef __CHAR_UNSIGNED__
 static const char not_available[] = "\377";
-#else
-static const char not_available[] = "\177";
-#endif
 
 const struct __locale_data _nl_C_LC_MONETARY attribute_hidden =
 {
diff --git a/locale/localeconv.c b/locale/localeconv.c
index 71ba4c6..98e82a5 100644
--- a/locale/localeconv.c
+++ b/locale/localeconv.c
@@ -28,7 +28,7 @@ __localeconv (void)
   result.decimal_point = (char *) _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
   result.thousands_sep = (char *) _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
   result.grouping = (char *) _NL_CURRENT (LC_NUMERIC, GROUPING);
-  if (*result.grouping == CHAR_MAX || *result.grouping == (char) -1)
+  if (*result.grouping == '\177' || *result.grouping == '\377')
     result.grouping = (char *) "";
 
   result.int_curr_symbol = (char *) _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
@@ -38,31 +38,29 @@ __localeconv (void)
   result.mon_thousands_sep = (char *) _NL_CURRENT (LC_MONETARY,
 						   MON_THOUSANDS_SEP);
   result.mon_grouping = (char *) _NL_CURRENT (LC_MONETARY, MON_GROUPING);
-  if (*result.mon_grouping == CHAR_MAX || *result.mon_grouping == (char) -1)
+  if (*result.mon_grouping == '\177' || *result.mon_grouping == '\377')
     result.mon_grouping = (char *) "";
   result.positive_sign = (char *) _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
   result.negative_sign = (char *) _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
-  result.int_frac_digits = *(char *) _NL_CURRENT (LC_MONETARY,
-						  INT_FRAC_DIGITS);
-  result.frac_digits = *(char *) _NL_CURRENT (LC_MONETARY, FRAC_DIGITS);
-  result.p_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY, P_CS_PRECEDES);
-  result.p_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY, P_SEP_BY_SPACE);
-  result.n_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY, N_CS_PRECEDES);
-  result.n_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY, N_SEP_BY_SPACE);
-  result.p_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
-  result.n_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
-  result.int_p_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY,
-						    INT_P_CS_PRECEDES);
-  result.int_p_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY,
-						     INT_P_SEP_BY_SPACE);
-  result.int_n_cs_precedes = *(char *) _NL_CURRENT (LC_MONETARY,
-						    INT_N_CS_PRECEDES);
-  result.int_n_sep_by_space = *(char *) _NL_CURRENT (LC_MONETARY,
-						     INT_N_SEP_BY_SPACE);
-  result.int_p_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY,
-						  INT_P_SIGN_POSN);
-  result.int_n_sign_posn = *(char *) _NL_CURRENT (LC_MONETARY,
-						  INT_N_SIGN_POSN);
+
+#define INT_ELEM(member, element) \
+  result.member = *(char *) _NL_CURRENT (LC_MONETARY, element);		      \
+  if (result.member == '\377') result.member = CHAR_MAX
+
+  INT_ELEM (int_frac_digits, INT_FRAC_DIGITS);
+  INT_ELEM (frac_digits, FRAC_DIGITS);
+  INT_ELEM (p_cs_precedes, P_CS_PRECEDES);
+  INT_ELEM (p_sep_by_space, P_SEP_BY_SPACE);
+  INT_ELEM (n_cs_precedes, N_CS_PRECEDES);
+  INT_ELEM (n_sep_by_space, N_SEP_BY_SPACE);
+  INT_ELEM (p_sign_posn, P_SIGN_POSN);
+  INT_ELEM (n_sign_posn, N_SIGN_POSN);
+  INT_ELEM (int_p_cs_precedes, INT_P_CS_PRECEDES);
+  INT_ELEM (int_p_sep_by_space, INT_P_SEP_BY_SPACE);
+  INT_ELEM (int_n_cs_precedes, INT_N_CS_PRECEDES);
+  INT_ELEM (int_n_sep_by_space, INT_N_SEP_BY_SPACE);
+  INT_ELEM (int_p_sign_posn, INT_P_SIGN_POSN);
+  INT_ELEM (int_n_sign_posn, INT_N_SIGN_POSN);
 
   return &result;
 }
diff --git a/locale/programs/ld-monetary.c b/locale/programs/ld-monetary.c
index ec86223..c88275f 100644
--- a/locale/programs/ld-monetary.c
+++ b/locale/programs/ld-monetary.c
@@ -677,6 +677,9 @@ monetary_read (struct linereader *ldfile, struct localedef_t *result,
 
 	      if (!ignore_content)
 		{
+		  /* A single -1 means no grouping.  */
+		  if (act == 1 && grouping[0] == '\177')
+		    act--;
 		  grouping[act++] = '\0';
 
 		  monetary->mon_grouping = xrealloc (grouping, act);
diff --git a/locale/programs/ld-numeric.c b/locale/programs/ld-numeric.c
index 093a049..f759947 100644
--- a/locale/programs/ld-numeric.c
+++ b/locale/programs/ld-numeric.c
@@ -305,6 +305,9 @@ numeric_read (struct linereader *ldfile, struct localedef_t *result,
 	      if (now->tok != tok_eol)
 		goto err_label;
 
+	      /* A single -1 means no grouping.  */
+	      if (act == 1 && grouping[0] == '\177')
+		act--;
 	      grouping[act++] = '\0';
 
 	      numeric->grouping = xrealloc (grouping, act);
diff --git a/locale/programs/locale.c b/locale/programs/locale.c
index 14d34e6..c0bdb6c 100644
--- a/locale/programs/locale.c
+++ b/locale/programs/locale.c
@@ -895,7 +895,7 @@ show_info (const char *name)
 	      printf ("%s=", item->name);
 
 	    if (val != NULL)
-	      printf ("%d", *val == '\177' ? -1 : *val);
+	      printf ("%d", *val == '\377' ? -1 : *val);
 	    putchar ('\n');
 	  }
 	  break;
diff --git a/stdlib/strfmon_l.c b/stdlib/strfmon_l.c
index 345e005..a257dac 100644
--- a/stdlib/strfmon_l.c
+++ b/stdlib/strfmon_l.c
@@ -158,8 +158,8 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
       group = 1;			/* Print digits grouped.  */
       pad = ' ';			/* Fill character is <SP>.  */
       is_long_double = 0;		/* Double argument by default.  */
-      p_sign_posn = -1;			/* This indicates whether the */
-      n_sign_posn = -1;			/* '(' flag is given.  */
+      p_sign_posn = -2;			/* This indicates whether the */
+      n_sign_posn = -2;			/* '(' flag is given.  */
       width = -1;			/* No width specified so far.  */
       left = 0;				/* Right justified by default.  */
 
@@ -181,7 +181,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 	      group = 0;
 	      continue;
 	    case '+':			/* Use +/- for sign of number.  */
-	      if (n_sign_posn != -1)
+	      if (n_sign_posn != -2)
 		{
 		  __set_errno (EINVAL);
 		  return -1;
@@ -190,7 +190,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 	      n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
 	      continue;
 	    case '(':			/* Use ( ) for negative sign.  */
-	      if (n_sign_posn != -1)
+	      if (n_sign_posn != -2)
 		{
 		  __set_errno (EINVAL);
 		  return -1;
@@ -310,16 +310,16 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 
       /* If not specified by the format string now find the values for
 	 the format specification.  */
-      if (p_sign_posn == -1)
+      if (p_sign_posn == -2)
 	p_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SIGN_POSN : P_SIGN_POSN);
-      if (n_sign_posn == -1)
+      if (n_sign_posn == -2)
 	n_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SIGN_POSN : N_SIGN_POSN);
 
       if (right_prec == -1)
 	{
 	  right_prec = *_NL_CURRENT (LC_MONETARY, int_format ? INT_FRAC_DIGITS : FRAC_DIGITS);
 
-	  if (right_prec == CHAR_MAX)
+	  if (right_prec == '\377')
 	    right_prec = 2;
 	}
 
@@ -384,13 +384,13 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 	cs_precedes = 1;
       if (other_cs_precedes != 0)
 	other_cs_precedes = 1;
-      if (sep_by_space == CHAR_MAX)
+      if (sep_by_space == '\377')
 	sep_by_space = 0;
-      if (other_sep_by_space == CHAR_MAX)
+      if (other_sep_by_space == '\377')
 	other_sep_by_space = 0;
-      if (sign_posn == CHAR_MAX)
+      if (sign_posn == '\377')
 	sign_posn = 1;
-      if (other_sign_posn == CHAR_MAX)
+      if (other_sign_posn == '\377')
 	other_sign_posn = 1;
 
       /* Check for degenerate cases */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                     |   16 ++++++++++++++
 locale/C-monetary.c           |    4 ---
 locale/localeconv.c           |   44 +++++++++++++++++++---------------------
 locale/programs/ld-monetary.c |    3 ++
 locale/programs/ld-numeric.c  |    3 ++
 locale/programs/locale.c      |    2 +-
 stdlib/strfmon_l.c            |   22 ++++++++++----------
 7 files changed, 55 insertions(+), 39 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]