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.13-209-gcc9e536


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  cc9e536dac7171fa62b73700a01495cc6b269560 (commit)
      from  aec84f53952315ac1bd91036e37113d9cb3a303b (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://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cc9e536dac7171fa62b73700a01495cc6b269560

commit cc9e536dac7171fa62b73700a01495cc6b269560
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Sat May 21 02:06:45 2011 -0400

    Fix handling of LC_CTYPE in locale name handling

diff --git a/ChangeLog b/ChangeLog
index 1337663..7a91156 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-05-21  Ulrich Drepper  <drepper@gmail.com>
 
+	[BZ #12788]
+	* locale/setlocale.c (new_composite_name): Fix test to check for
+	identical name of all categories.
+
 	[BZ #12792]
 	* libio/filedoalloc.c (local_isatty): New function.
 	(_IO_file_doallocate): Use local_isatty.
diff --git a/NEWS b/NEWS
index ca0ee8f..5eb39e4 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,7 @@ Version 2.14
   12454, 12460, 12469, 12489, 12509, 12510, 12511, 12518, 12527, 12541,
   12545, 12551, 12582, 12583, 12587, 12597, 12601, 12611, 12625, 12626,
   12631, 12650, 12653, 12655, 12660, 12681, 12685, 12711, 12713, 12714,
-  12717, 12723, 12724, 12734, 12738, 12746, 12766, 12775, 12792
+  12717, 12723, 12724, 12734, 12738, 12746, 12766, 12775, 12788, 12792
 
 * The RPC implementation in libc is obsoleted.  Old programs keep working
   but new programs cannot be linked with the routines in libc anymore.
diff --git a/locale/setlocale.c b/locale/setlocale.c
index 46372fd..94e1c64 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004, 2006, 2008, 2010
+/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004, 2006, 2008, 2010, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -155,7 +155,7 @@ new_composite_name (int category, const char *newnames[__LC_LAST])
 			    _nl_global_locale.__names[i]);
 	last_len = strlen (name);
 	cumlen += _nl_category_name_sizes[i] + 1 + last_len + 1;
-	if (i > 0 && same && strcmp (name, newnames[0]) != 0)
+	if (same && name != newnames[0] && strcmp (name, newnames[0]) != 0)
 	  same = 0;
       }
 
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 705c351..78965fb 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,9 @@
+2011-05-21  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12788]
+	* bug-setlocale1.c: New file.
+	* Makefile: Add rules to build and run bug-setlocale1.
+
 2011-05-17  Ulrich Drepper  <drepper@gmail.com>
 
 	[BZ #11837]
diff --git a/localedata/Makefile b/localedata/Makefile
index 8f356ec..81c1377 100644
--- a/localedata/Makefile
+++ b/localedata/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-2003,2005,2007,2008,2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2003,2005,2007,2008,2009,2011 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
@@ -94,7 +94,7 @@ locale_test_suite := tst_iswalnum tst_iswalpha tst_iswcntrl            \
 
 tests = $(locale_test_suite) tst-digits tst-setlocale bug-iconv-trans \
 	tst-leaks tst-mbswcs6 tst-xlocale1 tst-xlocale2 bug-usesetlocale \
-	tst-strfmon1 tst-sscanf tst-strptime
+	tst-strfmon1 tst-sscanf tst-strptime bug-setlocale1
 ifeq (yes,$(build-shared))
 ifneq (no,$(PERL))
 tests: $(objpfx)mtrace-tst-leaks
@@ -301,5 +301,8 @@ tst-leaks-ENV = MALLOC_TRACE=$(objpfx)tst-leaks.mtrace \
 $(objpfx)mtrace-tst-leaks: $(objpfx)tst-leaks.out
 	$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@
 
+bug-setlocale1-ENV = LOCPATH=$(common-objpfx)localedata
+bug-setlocale1-ARGS = $(common-objpfx)
+
 $(objdir)/iconvdata/gconv-modules:
 	$(MAKE) -C ../iconvdata subdir=iconvdata $@
diff --git a/localedata/bug-setlocale1.c b/localedata/bug-setlocale1.c
new file mode 100644
index 0000000..cf787be
--- /dev/null
+++ b/localedata/bug-setlocale1.c
@@ -0,0 +1,132 @@
+// BZ 12788
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+static int
+do_test (int argc, char *argv[])
+{
+  if (argc > 1)
+    {
+      char *newargv[5];
+      asprintf (&newargv[0], "%self/ld.so", argv[1]);
+      if (newargv[0] == NULL)
+	{
+	  puts ("asprintf failed");
+	  return 1;
+	}
+      newargv[1] = (char *) "--library-path";
+      newargv[2] = argv[1];
+      newargv[3] = argv[0];
+      newargv[4] = NULL;
+
+      char *env[3];
+      env[0] = (char *) "LC_CTYPE=de_DE.UTF-8";
+      char *loc = getenv ("LOCPATH");
+      if (loc == NULL || loc[0] == '\0')
+	{
+	  puts ("LOCPATH not set");
+	  return 1;
+	}
+      asprintf (&env[1], "LOCPATH=%s", loc);
+      if (newargv[0] == NULL)
+	{
+	  puts ("second asprintf failed");
+	  return 1;
+	}
+      env[2] = NULL;
+
+      execve (newargv[0], newargv, env);
+
+      puts ("execve returned");
+      return 1;
+    }
+
+  int result = 0;
+
+  char *a = setlocale (LC_ALL, "");
+  printf ("setlocale(LC_ALL, \"\") = %s\n", a);
+  if (a == NULL)
+    return 1;
+  a = strdupa (a);
+
+  char *b = setlocale (LC_CTYPE, "");
+  printf ("setlocale(LC_CTYPE, \"\") = %s\n", b);
+  if (b == NULL)
+    return 1;
+
+  char *c = setlocale (LC_ALL, NULL);
+  printf ("setlocale(LC_ALL, NULL) = %s\n", c);
+  if (c == NULL)
+    return 1;
+  c = strdupa (c);
+
+  if (strcmp (a, c) != 0)
+    {
+      puts ("*** first and third result do not match");
+      result = 1;
+    }
+
+  char *d = setlocale (LC_NUMERIC, "");
+  printf ("setlocale(LC_NUMERIC, \"\") = %s\n", d);
+  if (d == NULL)
+    return 1;
+
+  if (strcmp (d, "C") != 0)
+    {
+      puts ("*** LC_NUMERIC not C");
+      result = 1;
+    }
+
+  char *e = setlocale (LC_ALL, NULL);
+  printf ("setlocale(LC_ALL, NULL) = %s\n", e);
+  if (e == NULL)
+    return 1;
+
+  if (strcmp (a, e) != 0)
+    {
+      puts ("*** first and fifth result do not match");
+      result = 1;
+    }
+
+  char *f = setlocale (LC_ALL, "C");
+  printf ("setlocale(LC_ALL, \"C\") = %s\n", f);
+  if (f == NULL)
+    return 1;
+
+  if (strcmp (f, "C") != 0)
+    {
+      puts ("*** LC_ALL not C");
+      result = 1;
+    }
+
+  char *g = setlocale (LC_ALL, NULL);
+  printf ("setlocale(LC_ALL, NULL) = %s\n", g);
+  if (g == NULL)
+    return 1;
+
+  if (strcmp (g, "C") != 0)
+    {
+      puts ("*** LC_ALL not C");
+      result = 1;
+    }
+
+  char *h = setlocale (LC_CTYPE, NULL);
+  printf ("setlocale(LC_CTYPE, NULL) = %s\n", h);
+  if (h == NULL)
+    return 1;
+
+  if (strcmp (h, "C") != 0)
+    {
+      puts ("*** LC_CTYPE not C");
+      result = 1;
+    }
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test (argc, argv)
+#include "../test-skeleton.c"

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

Summary of changes:
 ChangeLog                   |    4 +
 NEWS                        |    2 +-
 locale/setlocale.c          |    4 +-
 localedata/ChangeLog        |    6 ++
 localedata/Makefile         |    7 ++-
 localedata/bug-setlocale1.c |  132 +++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 150 insertions(+), 5 deletions(-)
 create mode 100644 localedata/bug-setlocale1.c


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]