]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/glibc/glibc-rh826149.patch
dhcpcd: fix delay after dhcp down.
[ipfire-2.x.git] / src / patches / glibc / glibc-rh826149.patch
CommitLineData
30a4e827
MT
1diff -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