patches/glibc/ports-2.12.1/370-fnmatch.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@2437
     1
http://sourceware.org/ml/libc-hacker/2002-11/msg00071.html
yann@2437
     2
yann@2437
     3
When fnmatch detects an invalid multibyte character it should fall back to
yann@2437
     4
single byte matching, so that "*" has a chance to match such a string.
yann@2437
     5
yann@2437
     6
Andreas.
yann@2437
     7
yann@2437
     8
2005-04-12  Andreas Schwab  <schwab@suse.de>
yann@2437
     9
yann@2437
    10
	* posix/fnmatch.c (fnmatch): If conversion to wide character
yann@2437
    11
	fails fall back to single byte matching.
yann@2437
    12
yann@2437
    13
Index: posix/fnmatch.c
yann@2437
    14
===================================================================
yann@2437
    15
yann@2437
    16
diff -durN glibc-2.12.1.orig/posix/fnmatch.c glibc-2.12.1/posix/fnmatch.c
yann@2437
    17
--- glibc-2.12.1.orig/posix/fnmatch.c	2007-07-28 22:35:00.000000000 +0200
yann@2437
    18
+++ glibc-2.12.1/posix/fnmatch.c	2009-11-13 00:50:39.000000000 +0100
yann@2437
    19
@@ -327,6 +327,7 @@
yann@2437
    20
 # if HANDLE_MULTIBYTE
yann@2437
    21
   if (__builtin_expect (MB_CUR_MAX, 1) != 1)
yann@2437
    22
     {
yann@2437
    23
+      const char *orig_pattern = pattern;
yann@2437
    24
       mbstate_t ps;
yann@2437
    25
       size_t n;
yann@2437
    26
       const char *p;
yann@2437
    27
@@ -382,10 +383,8 @@
yann@2437
    28
 	  wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
yann@2437
    29
 	  n = mbsrtowcs (wstring, &p, n + 1, &ps);
yann@2437
    30
 	  if (__builtin_expect (n == (size_t) -1, 0))
yann@2437
    31
-	    /* Something wrong.
yann@2437
    32
-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
yann@2437
    33
-	       already done?  */
yann@2437
    34
-	    return -1;
yann@2437
    35
+	    /* Something wrong.  Fall back to single byte matching.  */
yann@2437
    36
+	    goto try_singlebyte;
yann@2437
    37
 	  if (p)
yann@2437
    38
 	    {
yann@2437
    39
 	      memset (&ps, '\0', sizeof (ps));
yann@2437
    40
@@ -397,10 +396,8 @@
yann@2437
    41
 	prepare_wstring:
yann@2437
    42
 	  n = mbsrtowcs (NULL, &string, 0, &ps);
yann@2437
    43
 	  if (__builtin_expect (n == (size_t) -1, 0))
yann@2437
    44
-	    /* Something wrong.
yann@2437
    45
-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
yann@2437
    46
-	       already done?  */
yann@2437
    47
-	    return -1;
yann@2437
    48
+	    /* Something wrong.  Fall back to single byte matching.  */
yann@2437
    49
+	    goto try_singlebyte;
yann@2437
    50
 	  wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
yann@2437
    51
 	  assert (mbsinit (&ps));
yann@2437
    52
 	  (void) mbsrtowcs (wstring, &string, n + 1, &ps);
yann@2437
    53
@@ -408,6 +405,9 @@
yann@2437
    54
 
yann@2437
    55
       return internal_fnwmatch (wpattern, wstring, wstring + n,
yann@2437
    56
 				flags & FNM_PERIOD, flags, NULL);
yann@2437
    57
+
yann@2437
    58
+    try_singlebyte:
yann@2437
    59
+      pattern = orig_pattern;
yann@2437
    60
     }
yann@2437
    61
 # endif  /* mbstate_t and mbsrtowcs or _LIBC.  */
yann@2437
    62