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