Mercurial > hg > octave-kai > gnulib-hg
annotate lib/fnmatch.c @ 6620:d01ba6cdaf9e
* fnmatch.c (L_): Renamed from L, to work around a bug in
Mac OS X 10.3.9 with GCC 3 reported by Claudio Fontana in
<http://lists.gnu.org/archive/html/bug-gnulib/2006-01/msg00074.html>.
All uses changed.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 27 Jan 2006 18:40:27 +0000 |
parents | 96c32553b4c6 |
children | fa896bb33133 |
rev | line source |
---|---|
6620
d01ba6cdaf9e
* fnmatch.c (L_): Renamed from L, to work around a bug in
Paul Eggert <eggert@cs.ucla.edu>
parents:
6259
diff
changeset
|
1 /* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006 |
4906
374463b88e34
Merge fnmatch patches from glibc.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4791
diff
changeset
|
2 Free Software Foundation, Inc. |
5 | 3 |
1249 | 4 This program is free software; you can redistribute it and/or modify |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
335 | 8 |
763 | 9 This program is distributed in the hope that it will be useful, |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
5 | 13 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
15 along with this program; if not, write to the Free Software Foundation, |
5848
a48fb0e98c8c
*** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents:
5181
diff
changeset
|
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
5 | 17 |
6259
96c32553b4c6
Use a consistent style for including <config.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5919
diff
changeset
|
18 #ifdef HAVE_CONFIG_H |
763 | 19 # include <config.h> |
77 | 20 #endif |
21 | |
1249 | 22 /* Enable GNU extensions in fnmatch.h. */ |
23 #ifndef _GNU_SOURCE | |
24 # define _GNU_SOURCE 1 | |
25 #endif | |
26 | |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
27 #if ! defined __builtin_expect && __GNUC__ < 3 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
28 # define __builtin_expect(expr, expected) (expr) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
29 #endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
30 |
42 | 31 #include <fnmatch.h> |
5 | 32 |
5063
1aecdc8063ba
alloca cleanup: always include <alloca.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4906
diff
changeset
|
33 #include <alloca.h> |
4643 | 34 #include <assert.h> |
35 #include <ctype.h> | |
36 #include <errno.h> | |
37 #include <stddef.h> | |
5159 | 38 #include <stdbool.h> |
4643 | 39 #include <stdlib.h> |
40 #include <string.h> | |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
41 |
5181
050058152c7c
(WIDE_CHAR_SUPPORT): Don't set to 1 if missing
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
42 #define WIDE_CHAR_SUPPORT \ |
050058152c7c
(WIDE_CHAR_SUPPORT): Don't set to 1 if missing
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
43 (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC \ |
050058152c7c
(WIDE_CHAR_SUPPORT): Don't set to 1 if missing
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
44 && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) |
3920
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
45 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
46 /* For platform which support the ISO C amendement 1 functionality we |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
47 support user defined character classes. */ |
3920
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
48 #if defined _LIBC || WIDE_CHAR_SUPPORT |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
49 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
50 # include <wchar.h> |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
51 # include <wctype.h> |
2954 | 52 #endif |
1249 | 53 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
54 /* We need some of the locale data (the collation sequence information) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
55 but there is no interface to get this information in general. Therefore |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
56 we support a correct implementation only in glibc. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
57 #ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
58 # include "../locale/localeinfo.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
59 # include "../locale/elem-hash.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
60 # include "../locale/coll-lookup.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
61 # include <shlib-compat.h> |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
62 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
63 # define CONCAT(a,b) __CONCAT(a,b) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
64 # define mbsrtowcs __mbsrtowcs |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
65 # define fnmatch __fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
66 extern int fnmatch (const char *pattern, const char *string, int flags); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
67 #endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
68 |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
69 #ifndef SIZE_MAX |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
70 # define SIZE_MAX ((size_t) -1) |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
71 #endif |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
72 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
73 /* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
74 #define NO_LEADING_PERIOD(flags) \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
75 ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
76 |
4906
374463b88e34
Merge fnmatch patches from glibc.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4791
diff
changeset
|
77 /* Comment out all this code if we are using the GNU C Library, and are not |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
78 actually compiling the library itself, and have not detected a bug |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
79 in the library. This code is part of the GNU C |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
80 Library, but also included in many other GNU distributions. Compiling |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
81 and linking in this code is a waste when using the GNU C library |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
82 (especially if it is a shared library). Rather than having every GNU |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
83 program understand `configure --with-gnu-libc' and omit the object files, |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
84 it is simpler to just do this in the source for each such file. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
85 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
86 #if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU |
1249 | 87 |
763 | 88 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
89 # if defined STDC_HEADERS || !defined isascii |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
90 # define ISASCII(c) 1 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
91 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
92 # define ISASCII(c) isascii(c) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
93 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
94 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
95 # ifdef isblank |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
96 # define ISBLANK(c) (ISASCII (c) && isblank (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
97 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
98 # define ISBLANK(c) ((c) == ' ' || (c) == '\t') |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
99 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
100 # ifdef isgraph |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
101 # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
102 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
103 # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
104 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
105 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
106 # define ISPRINT(c) (ISASCII (c) && isprint (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
107 # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
108 # define ISALNUM(c) (ISASCII (c) && isalnum (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
109 # define ISALPHA(c) (ISASCII (c) && isalpha (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
110 # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
111 # define ISLOWER(c) (ISASCII (c) && islower (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
112 # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
113 # define ISSPACE(c) (ISASCII (c) && isspace (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
114 # define ISUPPER(c) (ISASCII (c) && isupper (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
115 # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
116 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
117 # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
118 |
3920
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
119 # if defined _LIBC || WIDE_CHAR_SUPPORT |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
120 /* The GNU C library provides support for user-defined character classes |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
121 and the functions from ISO C amendement 1. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
122 # ifdef CHARCLASS_NAME_MAX |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
123 # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
124 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
125 /* This shouldn't happen but some implementation might still have this |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
126 problem. Use a reasonable default value. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
127 # define CHAR_CLASS_MAX_LENGTH 256 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
128 # endif |
5 | 129 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
130 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
131 # define IS_CHAR_CLASS(string) __wctype (string) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
132 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
133 # define IS_CHAR_CLASS(string) wctype (string) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
134 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
135 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
136 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
137 # define ISWCTYPE(WC, WT) __iswctype (WC, WT) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
138 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
139 # define ISWCTYPE(WC, WT) iswctype (WC, WT) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
140 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
141 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
142 # if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
143 /* In this case we are implementing the multibyte character handling. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
144 # define HANDLE_MULTIBYTE 1 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
145 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
146 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
147 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
148 # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
149 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
150 # define IS_CHAR_CLASS(string) \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
151 (STREQ (string, "alpha") || STREQ (string, "upper") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
152 || STREQ (string, "lower") || STREQ (string, "digit") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
153 || STREQ (string, "alnum") || STREQ (string, "xdigit") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
154 || STREQ (string, "space") || STREQ (string, "print") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
155 || STREQ (string, "punct") || STREQ (string, "graph") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
156 || STREQ (string, "cntrl") || STREQ (string, "blank")) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
157 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
158 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
159 /* Avoid depending on library functions or files |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
160 whose names are inconsistent. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
161 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
162 /* Global variable. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
163 static int posixly_correct; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
164 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
165 # ifndef internal_function |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
166 /* Inside GNU libc we mark some function in a special way. In other |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
167 environments simply ignore the marking. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
168 # define internal_function |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
169 # endif |
5 | 170 |
884 | 171 /* Note that this evaluates C many times. */ |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
172 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
173 # define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
174 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
175 # define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
176 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
177 # define CHAR char |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
178 # define UCHAR unsigned char |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
179 # define INT int |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
180 # define FCT internal_fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
181 # define EXT ext_match |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
182 # define END end_pattern |
6620
d01ba6cdaf9e
* fnmatch.c (L_): Renamed from L, to work around a bug in
Paul Eggert <eggert@cs.ucla.edu>
parents:
6259
diff
changeset
|
183 # define L_(CS) CS |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
184 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
185 # define BTOWC(C) __btowc (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
186 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
187 # define BTOWC(C) btowc (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
188 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
189 # define STRLEN(S) strlen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
190 # define STRCAT(D, S) strcat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
191 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
192 # define MEMPCPY(D, S, N) __mempcpy (D, S, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
193 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
194 # if HAVE_MEMPCPY |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
195 # define MEMPCPY(D, S, N) mempcpy (D, S, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
196 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
197 # define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
198 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
199 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
200 # define MEMCHR(S, C, N) memchr (S, C, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
201 # define STRCOLL(S1, S2) strcoll (S1, S2) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
202 # include "fnmatch_loop.c" |
42 | 203 |
5 | 204 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
205 # if HANDLE_MULTIBYTE |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
206 # define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
207 # define CHAR wchar_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
208 # define UCHAR wint_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
209 # define INT wint_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
210 # define FCT internal_fnwmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
211 # define EXT ext_wmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
212 # define END end_wpattern |
6620
d01ba6cdaf9e
* fnmatch.c (L_): Renamed from L, to work around a bug in
Paul Eggert <eggert@cs.ucla.edu>
parents:
6259
diff
changeset
|
213 # define L_(CS) L##CS |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
214 # define BTOWC(C) (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
215 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
216 # define STRLEN(S) __wcslen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
217 # define STRCAT(D, S) __wcscat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
218 # define MEMPCPY(D, S, N) __wmempcpy (D, S, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
219 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
220 # define STRLEN(S) wcslen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
221 # define STRCAT(D, S) wcscat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
222 # if HAVE_WMEMPCPY |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
223 # define MEMPCPY(D, S, N) wmempcpy (D, S, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
224 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
225 # define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
226 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
227 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
228 # define MEMCHR(S, C, N) wmemchr (S, C, N) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
229 # define STRCOLL(S1, S2) wcscoll (S1, S2) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
230 # define WIDE_CHAR_VERSION 1 |
5 | 231 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
232 # undef IS_CHAR_CLASS |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
233 /* We have to convert the wide character string in a multibyte string. But |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
234 we know that the character class names consist of alphanumeric characters |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
235 from the portable character set, and since the wide character encoding |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
236 for a member of the portable character set is the same code point as |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
237 its single-byte encoding, we can use a simplified method to convert the |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
238 string to a multibyte character string. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
239 static wctype_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
240 is_char_class (const wchar_t *wcs) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
241 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
242 char s[CHAR_CLASS_MAX_LENGTH + 1]; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
243 char *cp = s; |
5 | 244 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
245 do |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
246 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
247 /* Test for a printable character from the portable character set. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
248 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
249 if (*wcs < 0x20 || *wcs > 0x7e |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
250 || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
251 return (wctype_t) 0; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
252 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
253 switch (*wcs) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
254 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
255 case L' ': case L'!': case L'"': case L'#': case L'%': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
256 case L'&': case L'\'': case L'(': case L')': case L'*': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
257 case L'+': case L',': case L'-': case L'.': case L'/': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
258 case L'0': case L'1': case L'2': case L'3': case L'4': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
259 case L'5': case L'6': case L'7': case L'8': case L'9': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
260 case L':': case L';': case L'<': case L'=': case L'>': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
261 case L'?': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
262 case L'A': case L'B': case L'C': case L'D': case L'E': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
263 case L'F': case L'G': case L'H': case L'I': case L'J': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
264 case L'K': case L'L': case L'M': case L'N': case L'O': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
265 case L'P': case L'Q': case L'R': case L'S': case L'T': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
266 case L'U': case L'V': case L'W': case L'X': case L'Y': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
267 case L'Z': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
268 case L'[': case L'\\': case L']': case L'^': case L'_': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
269 case L'a': case L'b': case L'c': case L'd': case L'e': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
270 case L'f': case L'g': case L'h': case L'i': case L'j': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
271 case L'k': case L'l': case L'm': case L'n': case L'o': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
272 case L'p': case L'q': case L'r': case L's': case L't': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
273 case L'u': case L'v': case L'w': case L'x': case L'y': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
274 case L'z': case L'{': case L'|': case L'}': case L'~': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
275 break; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
276 default: |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
277 return (wctype_t) 0; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
278 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
279 # endif |
5 | 280 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
281 /* Avoid overrunning the buffer. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
282 if (cp == s + CHAR_CLASS_MAX_LENGTH) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
283 return (wctype_t) 0; |
5 | 284 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
285 *cp++ = (char) *wcs++; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
286 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
287 while (*wcs != L'\0'); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
288 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
289 *cp = '\0'; |
5 | 290 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
291 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
292 return __wctype (s); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
293 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
294 return wctype (s); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
295 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
296 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
297 # define IS_CHAR_CLASS(string) is_char_class (string) |
42 | 298 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
299 # include "fnmatch_loop.c" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
300 # endif |
5 | 301 |
302 | |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
303 int |
4643 | 304 fnmatch (const char *pattern, const char *string, int flags) |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
305 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
306 # if HANDLE_MULTIBYTE |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
307 # define ALLOCA_LIMIT 2000 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
308 if (__builtin_expect (MB_CUR_MAX, 1) != 1) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
309 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
310 mbstate_t ps; |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
311 size_t patsize; |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
312 size_t strsize; |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
313 size_t totsize; |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
314 wchar_t *wpattern; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
315 wchar_t *wstring; |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
316 int res; |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
317 |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
318 /* Calculate the size needed to convert the strings to |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
319 wide characters. */ |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
320 memset (&ps, '\0', sizeof (ps)); |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
321 patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; |
5919
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
322 if (__builtin_expect (patsize != 0, 1)) |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
323 { |
5919
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
324 assert (mbsinit (&ps)); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
325 strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
326 if (__builtin_expect (strsize != 0, 1)) |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
327 { |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
328 assert (mbsinit (&ps)); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
329 totsize = patsize + strsize; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
330 if (__builtin_expect (! (patsize <= totsize |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
331 && totsize <= SIZE_MAX / sizeof (wchar_t)), |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
332 0)) |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
333 { |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
334 errno = ENOMEM; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
335 return -1; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
336 } |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
337 |
5919
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
338 /* Allocate room for the wide characters. */ |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
339 if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
340 wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
341 else |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
342 { |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
343 wpattern = malloc (totsize * sizeof (wchar_t)); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
344 if (__builtin_expect (! wpattern, 0)) |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
345 { |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
346 errno = ENOMEM; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
347 return -1; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
348 } |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
349 } |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
350 wstring = wpattern + patsize; |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
351 |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
352 /* Convert the strings into wide characters. */ |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
353 mbsrtowcs (wpattern, &pattern, patsize, &ps); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
354 assert (mbsinit (&ps)); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
355 mbsrtowcs (wstring, &string, strsize, &ps); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
356 |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
357 res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
358 flags & FNM_PERIOD, flags); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
359 |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
360 if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
361 free (wpattern); |
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
362 return res; |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
363 } |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
364 } |
5919
1c2b6487c46b
* fnmatch.c (fnmatch): If there is an encoding error in a
Paul Eggert <eggert@cs.ucla.edu>
parents:
5848
diff
changeset
|
365 } |
4791
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
366 |
c47569f6dfaa
Check for address arithmetic overflow.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4643
diff
changeset
|
367 # endif /* HANDLE_MULTIBYTE */ |
5 | 368 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
369 return internal_fnmatch (pattern, string, string + strlen (string), |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
370 flags & FNM_PERIOD, flags); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
371 } |
5 | 372 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
373 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
374 # undef fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
375 versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
376 # if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
377 strong_alias (__fnmatch, __fnmatch_old) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
378 compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
379 # endif |
4906
374463b88e34
Merge fnmatch patches from glibc.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4791
diff
changeset
|
380 libc_hidden_ver (__fnmatch, fnmatch) |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
381 # endif |
42 | 382 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
383 #endif /* _LIBC or not __GNU_LIBRARY__. */ |