patches/glibc/ports-2.12.1/370-fnmatch.patch
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Wed Dec 05 20:31:43 2012 +0100 (2012-12-05)
changeset 3134 863723936e24
permissions -rw-r--r--
scripts/xldd: use user's sed and grep

xldd uses sed and grep as detected by ./configure. This works well if is
used on the machine that build the toolchain.

But if the user moves the toolchain to another machine where sed and grep
are not in the same directory (eg. /bin/sed vs. /usr/bin/sed), then xldd
will stop functionning.

Fix that by using ${SED} and ${GREP} if they are set in the environment.

Reported-by: Samuel Martin <s.martin49@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.12.1.orig/posix/fnmatch.c glibc-2.12.1/posix/fnmatch.c
    17 --- glibc-2.12.1.orig/posix/fnmatch.c	2007-07-28 22:35:00.000000000 +0200
    18 +++ glibc-2.12.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