patches/glibc/ports-2.10.1/370-fnmatch.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Mon Feb 25 21:19:31 2013 +0100 (2013-02-25)
changeset 3185 f89f8e6f8766
permissions -rw-r--r--
Makefile: fix parrallel (-j) installs

Currently, we would remove previously installed patches before
installing the new ones. Unfortunately, that does not play well
with heavily parallel installs.

Now, we consider it is the responsibility of the user to first
uninstall any previous version before installing a new one.

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