patches/glibc/2.9/410-2.9-fnmatch.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 31 23:24:40 2010 +0200 (2010-08-31)
changeset 2107 f5ab0a80e466
parent 1201 c9967a6e3b25
permissions -rw-r--r--
binutils/binutils: remove faulty patch

The added code should be conditinal to the target system
being !MIPS, but is based on the host system being !MIPS.

This is plain wrong, and had not been noticed until now
as I never used those binutils versions on MIPS.

See:
http://sourceware.org/ml/crossgcc/2010-08/msg00192.html

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