Mercurial > hg > octave-kai > gnulib-hg
annotate lib/fnmatch.c @ 4643:6ad23581140d
Remove K&R cruft.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 09 Sep 2003 06:48:57 +0000 |
parents | 678b6b899b7c |
children | c47569f6dfaa |
rev | line source |
---|---|
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
1 /* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, |
4643 | 2 2002, 2003 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, |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
5 | 17 |
763 | 18 #if HAVE_CONFIG_H |
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 #ifdef __GNUC__ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
28 # define alloca __builtin_alloca |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
29 # define HAVE_ALLOCA 1 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
30 #else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
31 # if defined HAVE_ALLOCA_H || defined _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
32 # include <alloca.h> |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
33 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
34 # ifdef _AIX |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
35 # pragma alloca |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
36 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
37 # ifndef alloca |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
38 char *alloca (); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
39 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
40 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
41 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
42 #endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
43 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
44 #if ! defined __builtin_expect && __GNUC__ < 3 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
45 # define __builtin_expect(expr, expected) (expr) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
46 #endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
47 |
42 | 48 #include <fnmatch.h> |
5 | 49 |
4643 | 50 #include <assert.h> |
51 #include <ctype.h> | |
52 #include <errno.h> | |
53 #include <stddef.h> | |
54 #include <stdlib.h> | |
55 #include <string.h> | |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
56 |
3920
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
57 #define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC) |
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
58 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
59 /* 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
|
60 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
|
61 #if defined _LIBC || WIDE_CHAR_SUPPORT |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
62 /* 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
|
63 # include <wchar.h> |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
64 # include <wctype.h> |
2954 | 65 #endif |
1249 | 66 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
67 /* 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
|
68 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
|
69 we support a correct implementation only in glibc. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
70 #ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
71 # include "../locale/localeinfo.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
72 # include "../locale/elem-hash.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
73 # include "../locale/coll-lookup.h" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
74 # include <shlib-compat.h> |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
75 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
76 # define CONCAT(a,b) __CONCAT(a,b) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
77 # define mbsinit __mbsinit |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
78 # define mbsrtowcs __mbsrtowcs |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
79 # define fnmatch __fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
80 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
|
81 #endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
82 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
83 /* 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
|
84 #define NO_LEADING_PERIOD(flags) \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
85 ((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
|
86 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
87 /* Comment out all this code if we are using the GNU C Library, are not |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
88 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
|
89 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
|
90 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
|
91 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
|
92 (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
|
93 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
|
94 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
|
95 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
96 #if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU |
1249 | 97 |
763 | 98 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
99 # if defined STDC_HEADERS || !defined isascii |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
100 # define ISASCII(c) 1 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
101 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
102 # define ISASCII(c) isascii(c) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
103 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
104 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
105 # ifdef isblank |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
106 # define ISBLANK(c) (ISASCII (c) && isblank (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
107 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
108 # define ISBLANK(c) ((c) == ' ' || (c) == '\t') |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
109 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
110 # ifdef isgraph |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
111 # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
112 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
113 # 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
|
114 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
115 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
116 # define ISPRINT(c) (ISASCII (c) && isprint (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
117 # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
118 # define ISALNUM(c) (ISASCII (c) && isalnum (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
119 # define ISALPHA(c) (ISASCII (c) && isalpha (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
120 # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
121 # define ISLOWER(c) (ISASCII (c) && islower (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
122 # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
123 # define ISSPACE(c) (ISASCII (c) && isspace (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
124 # define ISUPPER(c) (ISASCII (c) && isupper (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
125 # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
126 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
127 # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
128 |
3920
678b6b899b7c
(WIDE_CHAR_SUPPORT): New macro. Use it uniformly instead of
Jim Meyering <jim@meyering.net>
parents:
3912
diff
changeset
|
129 # if defined _LIBC || WIDE_CHAR_SUPPORT |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
130 /* 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
|
131 and the functions from ISO C amendement 1. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
132 # ifdef CHARCLASS_NAME_MAX |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
133 # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
134 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
135 /* 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
|
136 problem. Use a reasonable default value. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
137 # define CHAR_CLASS_MAX_LENGTH 256 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
138 # endif |
5 | 139 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
140 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
141 # define IS_CHAR_CLASS(string) __wctype (string) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
142 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
143 # define IS_CHAR_CLASS(string) wctype (string) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
144 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
145 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
146 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
147 # define ISWCTYPE(WC, WT) __iswctype (WC, WT) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
148 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
149 # define ISWCTYPE(WC, WT) iswctype (WC, WT) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
150 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
151 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
152 # if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
153 /* 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
|
154 # define HANDLE_MULTIBYTE 1 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
155 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
156 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
157 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
158 # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
159 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
160 # define IS_CHAR_CLASS(string) \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
161 (STREQ (string, "alpha") || STREQ (string, "upper") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
162 || STREQ (string, "lower") || STREQ (string, "digit") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
163 || STREQ (string, "alnum") || STREQ (string, "xdigit") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
164 || STREQ (string, "space") || STREQ (string, "print") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
165 || STREQ (string, "punct") || STREQ (string, "graph") \ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
166 || STREQ (string, "cntrl") || STREQ (string, "blank")) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
167 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
168 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
169 /* Avoid depending on library functions or files |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
170 whose names are inconsistent. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
171 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
172 # ifndef errno |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
173 extern int errno; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
174 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
175 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
176 /* Global variable. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
177 static int posixly_correct; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
178 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
179 # ifndef internal_function |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
180 /* 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
|
181 environments simply ignore the marking. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
182 # define internal_function |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
183 # endif |
5 | 184 |
884 | 185 /* Note that this evaluates C many times. */ |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
186 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
187 # 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
|
188 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
189 # 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
|
190 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
191 # define CHAR char |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
192 # define UCHAR unsigned char |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
193 # define INT int |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
194 # define FCT internal_fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
195 # define EXT ext_match |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
196 # define END end_pattern |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
197 # define L(CS) CS |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
198 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
199 # define BTOWC(C) __btowc (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
200 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
201 # define BTOWC(C) btowc (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
202 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
203 # define STRLEN(S) strlen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
204 # define STRCAT(D, S) strcat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
205 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
206 # 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
|
207 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
208 # if HAVE_MEMPCPY |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
209 # 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
|
210 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
211 # 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
|
212 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
213 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
214 # 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
|
215 # define STRCOLL(S1, S2) strcoll (S1, S2) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
216 # include "fnmatch_loop.c" |
42 | 217 |
5 | 218 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
219 # if HANDLE_MULTIBYTE |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
220 # 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
|
221 # define CHAR wchar_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
222 # define UCHAR wint_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
223 # define INT wint_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
224 # define FCT internal_fnwmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
225 # define EXT ext_wmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
226 # define END end_wpattern |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
227 # define L(CS) L##CS |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
228 # define BTOWC(C) (C) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
229 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
230 # define STRLEN(S) __wcslen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
231 # define STRCAT(D, S) __wcscat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
232 # 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
|
233 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
234 # define STRLEN(S) wcslen (S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
235 # define STRCAT(D, S) wcscat (D, S) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
236 # if HAVE_WMEMPCPY |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
237 # 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
|
238 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
239 # 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
|
240 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
241 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
242 # 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
|
243 # define STRCOLL(S1, S2) wcscoll (S1, S2) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
244 # define WIDE_CHAR_VERSION 1 |
5 | 245 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
246 # undef IS_CHAR_CLASS |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
247 /* 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 string to a multibyte character string. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
253 static wctype_t |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
254 is_char_class (const wchar_t *wcs) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
255 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
256 char s[CHAR_CLASS_MAX_LENGTH + 1]; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
257 char *cp = s; |
5 | 258 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
259 do |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
260 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
261 /* 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
|
262 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
263 if (*wcs < 0x20 || *wcs > 0x7e |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
264 || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
265 return (wctype_t) 0; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
266 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
267 switch (*wcs) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
268 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 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
|
273 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
|
274 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
|
275 case L'?': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
276 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 case L'Z': |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 break; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
290 default: |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
291 return (wctype_t) 0; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
292 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
293 # endif |
5 | 294 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
295 /* Avoid overrunning the buffer. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
296 if (cp == s + CHAR_CLASS_MAX_LENGTH) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
297 return (wctype_t) 0; |
5 | 298 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
299 *cp++ = (char) *wcs++; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
300 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
301 while (*wcs != L'\0'); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
302 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
303 *cp = '\0'; |
5 | 304 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
305 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
306 return __wctype (s); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
307 # else |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
308 return wctype (s); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
309 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
310 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
311 # define IS_CHAR_CLASS(string) is_char_class (string) |
42 | 312 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
313 # include "fnmatch_loop.c" |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
314 # endif |
5 | 315 |
316 | |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
317 int |
4643 | 318 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
|
319 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
320 # if HANDLE_MULTIBYTE |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
321 if (__builtin_expect (MB_CUR_MAX, 1) != 1) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
322 { |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
323 mbstate_t ps; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
324 size_t n; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
325 wchar_t *wpattern; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
326 wchar_t *wstring; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
327 |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
328 /* Convert the strings into wide characters. */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
329 memset (&ps, '\0', sizeof (ps)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
330 n = mbsrtowcs (NULL, &pattern, 0, &ps); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
331 if (__builtin_expect (n, 0) == (size_t) -1) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
332 /* Something wrong. |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
333 XXX Do we have to set `errno' to something which mbsrtows hasn't |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
334 already done? */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
335 return -1; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
336 wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
337 assert (mbsinit (&ps)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
338 (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps); |
5 | 339 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
340 assert (mbsinit (&ps)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
341 n = mbsrtowcs (NULL, &string, 0, &ps); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
342 if (__builtin_expect (n, 0) == (size_t) -1) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
343 /* Something wrong. |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
344 XXX Do we have to set `errno' to something which mbsrtows hasn't |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
345 already done? */ |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
346 return -1; |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
347 wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
348 assert (mbsinit (&ps)); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
349 (void) mbsrtowcs (wstring, &string, n + 1, &ps); |
5 | 350 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
351 return internal_fnwmatch (wpattern, wstring, wstring + n, |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
352 flags & FNM_PERIOD, flags); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
353 } |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
354 # endif /* mbstate_t and mbsrtowcs or _LIBC. */ |
5 | 355 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
356 return internal_fnmatch (pattern, string, string + strlen (string), |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
357 flags & FNM_PERIOD, flags); |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
358 } |
5 | 359 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
360 # ifdef _LIBC |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
361 # undef fnmatch |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
362 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
|
363 # 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
|
364 strong_alias (__fnmatch, __fnmatch_old) |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
365 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
|
366 # endif |
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
367 # endif |
42 | 368 |
3908
a6f24c3fd333
Update from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
2954
diff
changeset
|
369 #endif /* _LIBC or not __GNU_LIBRARY__. */ |