1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
2001-11-29 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/glob.c (next_brace_sub): Return NULL if braces
don't match, fix {{a,b},c} globbing, clean up.
Patch by Flavio Veloso <flaviovs@magnux.com>.
* posix/globtest.sh: Add new tests.
--- libc/posix/globtest.sh.jj Thu Aug 23 18:48:53 2001
+++ libc/posix/globtest.sh Thu Nov 29 13:32:05 2001
@@ -146,6 +146,32 @@ if test $failed -ne 0; then
result=1
fi
+failed=0
+${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+${common_objpfx}posix/globtest -b "$testdir" "{file{1,2},-file3}" |
+sort > $testout
+cat <<"EOF" | cmp - $testout >> $logfile || failed=1
+`-file3'
+`file1'
+`file2'
+EOF
+if test $failed -ne 0; then
+ echo "Braces test 2 failed" >> $logfile
+ result=1
+fi
+
+failed=0
+${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+${common_objpfx}posix/globtest -b "$testdir" "{" |
+sort > $testout
+cat <<"EOF" | cmp - $testout >> $logfile || failed=1
+GLOB_NOMATCH
+EOF
+if test $failed -ne 0; then
+ echo "Braces test 3 failed" >> $logfile
+ result=1
+fi
+
# Test NOCHECK
failed=0
${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
--- libc/sysdeps/generic/glob.c.jj Thu Aug 23 18:49:29 2001
+++ libc/sysdeps/generic/glob.c Thu Nov 29 13:17:21 2001
@@ -355,42 +355,14 @@ static
inline
#endif
const char *
-next_brace_sub (begin)
- const char *begin;
+next_brace_sub (cp)
+ const char *cp;
{
unsigned int depth = 0;
- const char *cp = begin;
-
- while (1)
- {
- if (depth == 0)
- {
- if (*cp != ',' && *cp != '}' && *cp != '\0')
- {
- if (*cp == '{')
- ++depth;
- ++cp;
- continue;
- }
- }
- else
- {
- while (*cp != '\0' && (*cp != '}' || depth > 0))
- {
- if (*cp == '}')
- --depth;
- ++cp;
- }
- if (*cp == '\0')
- /* An incorrectly terminated brace expression. */
- return NULL;
-
- continue;
- }
- break;
- }
-
- return cp;
+ while (*cp != '\0' && (*cp != '}' || depth--) && (*cp != ',' || depth))
+ if (*cp++ == '{')
+ depth++;
+ return *cp != '\0' ? cp : NULL;
}
#endif /* !GLOB_ONLY_P */
|