]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/glibc/glibc-rh826149.patch
dhcpcd: fix delay after dhcp down.
[ipfire-2.x.git] / src / patches / glibc / glibc-rh826149.patch
1 diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c
2 --- a/posix/fnmatch.c 2012-05-25 12:37:26.566678872 -0400
3 +++ b/posix/fnmatch.c 2012-05-25 13:08:44.451972286 -0400
4 @@ -333,6 +333,7 @@ fnmatch (pattern, string, flags)
5 # if HANDLE_MULTIBYTE
6 if (__builtin_expect (MB_CUR_MAX, 1) != 1)
7 {
8 + const char *orig_pattern = pattern;
9 mbstate_t ps;
10 size_t n;
11 const char *p;
12 @@ -356,10 +357,9 @@ fnmatch (pattern, string, flags)
13 alloca_used);
14 n = mbsrtowcs (wpattern, &p, n + 1, &ps);
15 if (__builtin_expect (n == (size_t) -1, 0))
16 - /* Something wrong.
17 - XXX Do we have to set `errno' to something which mbsrtows hasn't
18 - already done? */
19 - return -1;
20 + /* Something wrong: Fall back to single byte matching. */
21 + goto try_singlebyte;
22 +
23 if (p)
24 {
25 memset (&ps, '\0', sizeof (ps));
26 @@ -371,10 +371,8 @@ fnmatch (pattern, string, flags)
27 prepare_wpattern:
28 n = mbsrtowcs (NULL, &pattern, 0, &ps);
29 if (__builtin_expect (n == (size_t) -1, 0))
30 - /* Something wrong.
31 - XXX Do we have to set `errno' to something which mbsrtows hasn't
32 - already done? */
33 - return -1;
34 + /* Something wrong: Fall back to single byte matching. */
35 + goto try_singlebyte;
36 if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
37 {
38 __set_errno (ENOMEM);
39 @@ -401,14 +399,8 @@ fnmatch (pattern, string, flags)
40 alloca_used);
41 n = mbsrtowcs (wstring, &p, n + 1, &ps);
42 if (__builtin_expect (n == (size_t) -1, 0))
43 - {
44 - /* Something wrong.
45 - XXX Do we have to set `errno' to something which
46 - mbsrtows hasn't already done? */
47 - free_return:
48 - free (wpattern_malloc);
49 - return -1;
50 - }
51 + /* Something wrong: Fall back to single byte matching. */
52 + goto free_and_try_singlebyte;
53 if (p)
54 {
55 memset (&ps, '\0', sizeof (ps));
56 @@ -420,10 +412,8 @@ fnmatch (pattern, string, flags)
57 prepare_wstring:
58 n = mbsrtowcs (NULL, &string, 0, &ps);
59 if (__builtin_expect (n == (size_t) -1, 0))
60 - /* Something wrong.
61 - XXX Do we have to set `errno' to something which mbsrtows hasn't
62 - already done? */
63 - goto free_return;
64 + /* Something wrong: Fall back to single byte matching. */
65 + goto free_and_try_singlebyte;
66 if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
67 {
68 free (wpattern_malloc);
69 @@ -450,6 +440,11 @@ fnmatch (pattern, string, flags)
70 free (wpattern_malloc);
71
72 return res;
73 +
74 + free_and_try_singlebyte:
75 + free(wpattern_malloc);
76 + try_singlebyte:
77 + pattern = orig_pattern;
78 }
79 # endif /* mbstate_t and mbsrtowcs or _LIBC. */
80