patches/glibc/ports-2.12.1/370-fnmatch.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Tue Jul 31 22:27:29 2012 +0200 (2012-07-31)
changeset 3018 7776e8369284
permissions -rw-r--r--
complibs/cloog: create missing m4 dir

Because we now patch configure.in and configure, the Makefile quicks
in a re-build rule as the source files are now more recent than the
bundled generated files, and that fails because the m4 directory
is missing, although on some systems where aclocal is not installed,
the re-build rule does nothing (except a warning).

Always create tht directory.

Reported-by: Per Arnold Blaasmo <per-arnold.blaasmo@atmel.com>
[Also thanks to Thomas De Schampheleire <patrickdepinguin@gmail.com>
for some digging works on this issue]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.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