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 release/2.22/master updated. glibc-2.22-18-g2b529a8


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, release/2.22/master has been updated
       via  2b529a82afc15a76185fca16ba7bcc8fbd82d15d (commit)
       via  c0769d60c1d107d9fb622e80c9d1110deb4fb3b4 (commit)
       via  ed7f3a2e27e816488d5a8ef570052a5a2c3c515b (commit)
       via  6c84109cfa26f35c3dfed3acb97d347361bd5849 (commit)
      from  666bb4dc55f5a93538d020024c34abad641f50ae (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=2b529a82afc15a76185fca16ba7bcc8fbd82d15d

commit 2b529a82afc15a76185fca16ba7bcc8fbd82d15d
Author: Carlos O'Donell <carlos@systemhalted.org>
Date:   Fri Oct 9 16:35:53 2015 -0400

    Fix typo in bug-strcoll2 (Bug 18589)
    
    Fix the copyright year and remove contributed by in the
    bug-strcoll2 test. In addition add the correct dependency
    on $(gen-locales) to ensure all the test locales are generated.
    
    (cherry picked from commit facdd9ea29ab94aac2b188ec3cc41f8733d769e0)

diff --git a/ChangeLog b/ChangeLog
index 4854461..491d5c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-10-09  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #18589]
+	* string/bug-strcoll2.c: Adjust copyright, and remove contributed by.
+	* string/Makefile ($(objpfx)bug-strcoll2.out): Depend on
+	$(gen-locales).
+
 2015-10-08  Carlos O'Donell  <carlos@redhat.com>
 
 	[BZ #18589]
diff --git a/string/Makefile b/string/Makefile
index 616fdec..ebe9354 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -85,5 +85,7 @@ $(objpfx)test-strcasecmp.out: $(gen-locales)
 $(objpfx)test-strncasecmp.out: $(gen-locales)
 $(objpfx)tst-strxfrm.out: $(gen-locales)
 $(objpfx)tst-strxfrm2.out: $(gen-locales)
+# bug-strcoll2 needs cs_CZ.UTF-8 and da_DK.ISO-8859-1.
+$(objpfx)bug-strcoll2.out: $(gen-locales)
 
 endif
diff --git a/string/bug-strcoll2.c b/string/bug-strcoll2.c
index 26cc873..72a9ff2 100644
--- a/string/bug-strcoll2.c
+++ b/string/bug-strcoll2.c
@@ -1,7 +1,6 @@
 /* Bug 18589: sort-test.sh fails at random.
-   Copyright (C) 1998-2015 Free Software Foundation, Inc.
+   Copyright (C) 2015 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public

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

commit c0769d60c1d107d9fb622e80c9d1110deb4fb3b4
Author: Carlos O'Donell <carlos@systemhalted.org>
Date:   Thu Oct 8 16:54:30 2015 -0400

    strcoll: Add bug-strcoll2 to testsuite (Bug 18589).
    
    Adds bug-strcoll2 to the string tests, along with the
    generation of required locales.
    
    (cherry picked from commit 02018629a1397d03eccceacaf2ee1c50e3c4001c)

diff --git a/ChangeLog b/ChangeLog
index 5698424..4854461 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-08  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #18589]
+	* string/Makefile (tests): Add bug-strcoll2.
+	(LOCALES): Add cs_CZ.UTF-8.
+
 2015-09-28  Martin Sebor  <msebor@redhat.com>
 
 	[BZ #18969]
diff --git a/string/Makefile b/string/Makefile
index c543159..616fdec 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -54,7 +54,7 @@ tests		:= tester inl-tester noinl-tester testcopy test-ffs	\
 		   tst-strtok tst-strxfrm bug-strcoll1 tst-strfry	\
 		   bug-strtok1 $(addprefix test-,$(strop-tests))	\
 		   bug-envz1 tst-strxfrm2 tst-endian tst-svc2		\
-		   tst-strtok_r
+		   tst-strtok_r bug-strcoll2
 
 xtests = tst-strcoll-overflow
 
@@ -77,7 +77,8 @@ $(objpfx)tst-svc-cmp.out: tst-svc.expect $(objpfx)tst-svc.out
 	$(evaluate-test)
 
 LOCALES := de_DE.UTF-8 en_US.ISO-8859-1 en_US.UTF-8 \
-           tr_TR.ISO-8859-9 tr_TR.UTF-8
+           tr_TR.ISO-8859-9 tr_TR.UTF-8 cs_CZ.UTF-8 \
+	   da_DK.ISO-8859-1
 include ../gen-locales.mk
 
 $(objpfx)test-strcasecmp.out: $(gen-locales)
diff --git a/string/bug-strcoll2.c b/string/bug-strcoll2.c
index 5ce2f94..26cc873 100644
--- a/string/bug-strcoll2.c
+++ b/string/bug-strcoll2.c
@@ -47,7 +47,7 @@ test_cs_CZ (void)
     }
   else
     {
-      puts ("FAIL: Wrong sorting in cz_CZ.UTF-8.");
+      puts ("FAIL: Wrong sorting in cs_CZ.UTF-8.");
       return 1;
     }
 }

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

commit ed7f3a2e27e816488d5a8ef570052a5a2c3c515b
Author: Martin Sebor <msebor@gcc.gnu.org>
Date:   Mon Sep 28 16:55:57 2015 -0400

    Let 'make check subdirs=string' succeed even when it's invoked
    immediately after glibc has been built and before 'make check'
    (or after 'make clean').
    
    (cherry picked from commit 60cf80f09d029257caedc0c8abe7e3e09c64e6c7)

diff --git a/ChangeLog b/ChangeLog
index 70a1dfe..5698424 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2015-09-28  Martin Sebor  <msebor@redhat.com>
+
+	[BZ #18969]
+	* string/Makefile (LOCALES): Define.
+	(gen-locales.mk): Include.
+	(test-strcasecmp.out, test-strncasecmp.out, tst-strxfrm.out)
+	(tst-strxfrm2.out): Add deppendency on $(gen-locales).
+	* string/tst-strxfrm2.c (do_test): Print the name of the locale
+	on setlocale failure.
+
 2015-10-08  Carlos O'Donell  <carlos@redhat.com>
 
 	[BZ #18589]
diff --git a/NEWS b/NEWS
index 44ddc97..9b10bff 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.22.1
 
 * The following bugs are resolved with this release:
 
-  18589, 18778, 18781, 18787, 18796, 18870, 18887, 18921.
+  18589, 18778, 18781, 18787, 18796, 18870, 18887, 18921, 18969.
 
 Version 2.22
 
diff --git a/string/Makefile b/string/Makefile
index 8424a61..c543159 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -75,4 +75,14 @@ ifeq ($(run-built-tests),yes)
 $(objpfx)tst-svc-cmp.out: tst-svc.expect $(objpfx)tst-svc.out
 	cmp $^ > $@; \
 	$(evaluate-test)
+
+LOCALES := de_DE.UTF-8 en_US.ISO-8859-1 en_US.UTF-8 \
+           tr_TR.ISO-8859-9 tr_TR.UTF-8
+include ../gen-locales.mk
+
+$(objpfx)test-strcasecmp.out: $(gen-locales)
+$(objpfx)test-strncasecmp.out: $(gen-locales)
+$(objpfx)tst-strxfrm.out: $(gen-locales)
+$(objpfx)tst-strxfrm2.out: $(gen-locales)
+
 endif
diff --git a/string/tst-strxfrm2.c b/string/tst-strxfrm2.c
index d5a1115..bea5aa2 100644
--- a/string/tst-strxfrm2.c
+++ b/string/tst-strxfrm2.c
@@ -5,6 +5,8 @@
 static int
 do_test (void)
 {
+  static const char test_locale[] = "de_DE.UTF-8";
+
   int res = 0;
 
   char buf[20];
@@ -38,9 +40,9 @@ do_test (void)
       res = 1;
     }
 
-  if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
+  if (setlocale (LC_ALL, test_locale) == NULL)
     {
-      puts ("setlocale failed");
+      printf ("cannot set locale \"%s\"\n", test_locale);
       res = 1;
     }
   else

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=6c84109cfa26f35c3dfed3acb97d347361bd5849

commit 6c84109cfa26f35c3dfed3acb97d347361bd5849
Author: Carlos O'Donell <carlos@systemhalted.org>
Date:   Thu Oct 8 16:34:53 2015 -0400

    strcoll: Remove incorrect STRDIFF-based optimization (Bug 18589).
    
    The optimization introduced in commit
    f13c2a8dff2329c6692a80176262ceaaf8a6f74e, causes regressions in
    sorting for languages that have digraphs that change sort order, like
    cs_CZ which sorts ch between h and i.
    
    My analysis shows the fast-forwarding optimization in STRCOLL advances
    through a digraph while possibly stopping in the middle which results
    in a subsequent skipping of the digraph and incorrect sorting. The
    optimization is incorrect as implemented and because of that I'm
    removing it for 2.23, and I will also commit this fix for 2.22 where
    it was originally introduced.
    
    This patch reverts the optimization, introduces a new bug-strcoll2.c
    regression test that tests both cs_CZ.UTF-8 and da_DK.ISO-8859-1 and
    ensures they sort one digraph each correctly. The optimization can't be
    applied without regressing this test.
    
    Checked on x86_64, bug-strcoll2.c fails without this patch and passes
    after. This will also get a fix on 2.22 which has the same bug.
    
    (cherry picked from commit 87701a58e291bd7ac3b407d10a829dac52c9c16e)

diff --git a/ChangeLog b/ChangeLog
index a25da67..70a1dfe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2015-10-08  Carlos O'Donell  <carlos@redhat.com>
+
+	[BZ #18589]
+	* string/bug-strcoll2.c: New file.
+	* locale/categories.def: Revert commit
+	f13c2a8dff2329c6692a80176262ceaaf8a6f74e.
+	* locale/langinfo.h: Likewise.
+	* locale/localeinfo.h: Likewise.
+	* locale/C-collate.c: Likewise.
+	* programs/ld-collate.c (collate_output): Likewise.
+	* string/strcoll_l.c (STRDIFF): Likewise.
+	(STRCOLL): Likewise.
+	* wcsmbs/wcscoll_l.c: Likewise.
+
 2015-09-15  Roland McGrath  <roland@hack.frob.com>
 
 	* misc/sys/param.h [!MAXHOSTNAMELEN && HOST_NAME_MAX]
diff --git a/NEWS b/NEWS
index d220c07..44ddc97 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.22.1
 
 * The following bugs are resolved with this release:
 
-  18778, 18781, 18787, 18796, 18870, 18887, 18921.
+  18589, 18778, 18781, 18787, 18796, 18870, 18887, 18921.
 
 Version 2.22
 
diff --git a/locale/C-collate.c b/locale/C-collate.c
index d7f3c55..06dfdfa 100644
--- a/locale/C-collate.c
+++ b/locale/C-collate.c
@@ -144,8 +144,6 @@ const struct __locale_data _nl_C_LC_COLLATE attribute_hidden =
     /* _NL_COLLATE_COLLSEQWC */
     { .string = (const char *) collseqwc },
     /* _NL_COLLATE_CODESET */
-    { .string = _nl_C_codeset },
-    /* _NL_COLLATE_ENCODING_TYPE */
-    { .word = __cet_8bit }
+    { .string = _nl_C_codeset }
   }
 };
diff --git a/locale/categories.def b/locale/categories.def
index 045489d..a8dda53 100644
--- a/locale/categories.def
+++ b/locale/categories.def
@@ -58,7 +58,6 @@ DEFINE_CATEGORY
   DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB,        "collate-collseqmb",        std, wstring)
   DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC,        "collate-collseqwc",        std, wstring)
   DEFINE_ELEMENT (_NL_COLLATE_CODESET,		"collate-codeset",	    std, string)
-  DEFINE_ELEMENT (_NL_COLLATE_ENCODING_TYPE,   "collate-encoding-type",    std, word)
   ), NO_POSTLOAD)
 
 
diff --git a/locale/langinfo.h b/locale/langinfo.h
index ffc5c7f..a565d9d 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -255,7 +255,6 @@ enum
   _NL_COLLATE_COLLSEQMB,
   _NL_COLLATE_COLLSEQWC,
   _NL_COLLATE_CODESET,
-  _NL_COLLATE_ENCODING_TYPE,
   _NL_NUM_LC_COLLATE,
 
   /* LC_CTYPE category: character classification.
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index bdab9fe..1d2ee00 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -110,14 +110,6 @@ enum coll_sort_rule
   sort_mask
 };
 
-/* Collation encoding type.  */
-enum collation_encoding_type
-{
-  __cet_other,
-  __cet_8bit,
-  __cet_utf8
-};
-
 /* We can map the types of the entries into a few categories.  */
 enum value_type
 {
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index a39a94f..dc0fe30 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -32,7 +32,6 @@
 #include "linereader.h"
 #include "locfile.h"
 #include "elem-hash.h"
-#include "../localeinfo.h"
 
 /* Uncomment the following line in the production version.  */
 /* #define NDEBUG 1 */
@@ -2131,8 +2130,6 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
 	  /* The words have to be handled specially.  */
 	  if (idx == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_HASH_SIZEMB))
 	    add_locale_uint32 (&file, 0);
-	  else if (idx == _NL_ITEM_INDEX (_NL_COLLATE_ENCODING_TYPE))
-	    add_locale_uint32 (&file, __cet_other);
 	  else
 	    add_locale_empty (&file);
 	}
@@ -2496,12 +2493,6 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
   add_locale_raw_data (&file, collate->mbseqorder, 256);
   add_locale_collseq_table (&file, &collate->wcseqorder);
   add_locale_string (&file, charmap->code_set_name);
-  if (strcmp (charmap->code_set_name, "UTF-8") == 0)
-    add_locale_uint32 (&file, __cet_utf8);
-  else if (charmap->mb_cur_max == 1)
-    add_locale_uint32 (&file, __cet_8bit);
-  else
-    add_locale_uint32 (&file, __cet_other);
   write_locale_data (output_path, LC_COLLATE, "LC_COLLATE", &file);
 
   obstack_free (&weightpool, NULL);
diff --git a/string/bug-strcoll2.c b/string/bug-strcoll2.c
new file mode 100644
index 0000000..5ce2f94
--- /dev/null
+++ b/string/bug-strcoll2.c
@@ -0,0 +1,93 @@
+/* Bug 18589: sort-test.sh fails at random.
+   Copyright (C) 1998-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <string.h>
+#include <locale.h>
+
+/* An incorrect strcoll optimization resulted in incorrect
+   results from strcoll for cs_CZ and da_DK.  */
+
+int
+test_cs_CZ (void)
+{
+  const char t1[] = "config";
+  const char t2[] = "choose";
+  if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+    {
+      perror ("setlocale");
+      return 1;
+    }
+  /* In Czech the digraph ch sorts after c, therefore we expect
+     config to sort before choose.  */
+  int a = strcoll (t1, t2);
+  int b = strcoll (t2, t1);
+  printf ("strcoll (\"%s\", \"%s\") = %d\n", t1, t2, a);
+  printf ("strcoll (\"%s\", \"%s\") = %d\n", t2, t1, b);
+  if (a < 0 && b > 0)
+    {
+      puts ("PASS: config < choose");
+      return 0;
+    }
+  else
+    {
+      puts ("FAIL: Wrong sorting in cz_CZ.UTF-8.");
+      return 1;
+    }
+}
+
+int
+test_da_DK (void)
+{
+  const char t1[] = "AS";
+  const char t2[] = "AA";
+  if (setlocale (LC_ALL, "da_DK.ISO-8859-1") == NULL)
+    {
+      perror ("setlocale");
+      return 1;
+    }
+  /* AA should be treated as the last letter of the Danish alphabet,
+     hence sorting after AS.  */
+  int a = strcoll (t1, t2);
+  int b = strcoll (t2, t1);
+  printf ("strcoll (\"%s\", \"%s\") = %d\n", t1, t2, a);
+  printf ("strcoll (\"%s\", \"%s\") = %d\n", t2, t1, b);
+  if (a < 0 && b > 0)
+    {
+      puts ("PASS: AS < AA");
+      return 0;
+    }
+  else
+    {
+      puts ("FAIL: Wrong sorting in da_DK.ISO-8859-1");
+      return 1;
+    }
+}
+
+static int
+do_test (void)
+{
+  int err = 0;
+  err |= test_cs_CZ ();
+  err |= test_da_DK ();
+  return err;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/string/strcoll_l.c b/string/strcoll_l.c
index 8f1225f..35bc0e4 100644
--- a/string/strcoll_l.c
+++ b/string/strcoll_l.c
@@ -29,7 +29,6 @@
 # define STRING_TYPE char
 # define USTRING_TYPE unsigned char
 # define STRCOLL __strcoll_l
-# define STRDIFF __strdiff
 # define STRCMP strcmp
 # define WEIGHT_H "../locale/weight.h"
 # define SUFFIX	MB
@@ -42,20 +41,6 @@
 #include "../locale/localeinfo.h"
 #include WEIGHT_H
 
-#define MASK_UTF8_7BIT  (1 << 7)
-#define MASK_UTF8_START (3 << 6)
-
-size_t
-STRDIFF (const STRING_TYPE *s, const STRING_TYPE *t)
-{
-  size_t n;
-
-  for (n = 0; *s != '\0' && *s++ == *t++; ++n)
-    continue;
-
-  return n;
-}
-
 /* Track status while looking for sequences in a string.  */
 typedef struct
 {
@@ -269,29 +254,9 @@ STRCOLL (const STRING_TYPE *s1, const STRING_TYPE *s2, __locale_t l)
   const USTRING_TYPE *extra;
   const int32_t *indirect;
 
-  /* In case there is no locale specific sort order (C / POSIX).  */
   if (nrules == 0)
     return STRCMP (s1, s2);
 
-  /* Fast forward to the position of the first difference.  Needs to be
-     encoding aware as the byte-by-byte comparison can stop in the middle
-     of a char sequence for multibyte encodings like UTF-8.  */
-  uint_fast32_t encoding =
-    current->values[_NL_ITEM_INDEX (_NL_COLLATE_ENCODING_TYPE)].word;
-  if (encoding != __cet_other)
-    {
-      size_t diff = STRDIFF (s1, s2);
-      if (diff > 0)
-	{
-	  if (encoding == __cet_utf8 && (*(s1 + diff) & MASK_UTF8_7BIT) != 0)
-	    do
-	      diff--;
-	    while (diff > 0 && (*(s1 + diff) & MASK_UTF8_START) != MASK_UTF8_START);
-	  s1 += diff;
-	  s2 += diff;
-	}
-    }
-
   /* Catch empty strings.  */
   if (__glibc_unlikely (*s1 == '\0') || __glibc_unlikely (*s2 == '\0'))
     return (*s1 != '\0') - (*s2 != '\0');
@@ -358,8 +323,7 @@ STRCOLL (const STRING_TYPE *s1, const STRING_TYPE *s2, __locale_t l)
 		     byte-level comparison to ensure that we don't waste time
 		     going through multiple passes for totally equal strings
 		     before proceeding to subsequent passes.  */
-		  if (pass == 0 && encoding == __cet_other &&
-		      STRCMP (s1, s2) == 0)
+		  if (pass == 0 && STRCMP (s1, s2) == 0)
 		    return result;
 		  else
 		    break;
diff --git a/wcsmbs/wcscoll_l.c b/wcsmbs/wcscoll_l.c
index 6d9384a..87f240d 100644
--- a/wcsmbs/wcscoll_l.c
+++ b/wcsmbs/wcscoll_l.c
@@ -23,7 +23,6 @@
 #define STRING_TYPE wchar_t
 #define USTRING_TYPE wint_t
 #define STRCOLL __wcscoll_l
-#define STRDIFF __wcsdiff
 #define STRCMP __wcscmp
 #define WEIGHT_H "../locale/weightwc.h"
 #define SUFFIX	WC

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

Summary of changes:
 ChangeLog                    |   37 +++++++++++++++++
 NEWS                         |    2 +-
 locale/C-collate.c           |    4 +-
 locale/categories.def        |    1 -
 locale/langinfo.h            |    1 -
 locale/localeinfo.h          |    8 ----
 locale/programs/ld-collate.c |    9 ----
 string/Makefile              |   15 ++++++-
 string/bug-strcoll2.c        |   92 ++++++++++++++++++++++++++++++++++++++++++
 string/strcoll_l.c           |   38 +-----------------
 string/tst-strxfrm2.c        |    6 ++-
 wcsmbs/wcscoll_l.c           |    1 -
 12 files changed, 150 insertions(+), 64 deletions(-)
 create mode 100644 string/bug-strcoll2.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]