actually remove compat fnmatch source code
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nguyễn Thái Ngọc Duy committed
Feb 15, 2014 at 09:01 UTC
2c0a1bd616f6d81905c4e8b98e8c9f2d7324924c
2 files changed
-578
compat/fnmatch/fnmatch.c
deleted
-494
@@ -1,494 +0,0 @@
1
-/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
2
- This file is part of the GNU C Library.
3
-
4
- This library is free software; you can redistribute it and/or
5
- modify it under the terms of the GNU Library General Public License as
6
- published by the Free Software Foundation; either version 2 of the
7
- License, or (at your option) any later version.
8
-
9
- This library 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 GNU
12
- Library General Public License for more details.
13
-
14
- You should have received a copy of the GNU Library General Public
15
- License along with this library; see the file COPYING.LIB. If not,
16
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
- Boston, MA 02111-1307, USA. */
18
-
19
-#if HAVE_CONFIG_H
20
-# include <config.h>
21
-#endif
22
-
23
-/* Enable GNU extensions in fnmatch.h. */
24
-#ifndef _GNU_SOURCE
25
-# define _GNU_SOURCE 1
26
-#endif
27
-
28
-#include <stddef.h>
29
-#include <errno.h>
30
-#include <fnmatch.h>
31
-#include <ctype.h>
32
-
33
-#if HAVE_STRING_H || defined _LIBC
34
-# include <string.h>
35
-#else
36
-# include <strings.h>
37
-#endif
38
-
39
-#if defined STDC_HEADERS || defined _LIBC
40
-# include <stdlib.h>
41
-#endif
42
-
43
-/* For platforms which support the ISO C amendment 1 functionality we
44
- support user defined character classes. */
45
-#if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
46
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
47
-# include <wchar.h>
48
-# include <wctype.h>
49
-#endif
50
-
51
-/* Comment out all this code if we are using the GNU C Library, and are not
52
- actually compiling the library itself. This code is part of the GNU C
53
- Library, but also included in many other GNU distributions. Compiling
54
- and linking in this code is a waste when using the GNU C library
55
- (especially if it is a shared library). Rather than having every GNU
56
- program understand `configure --with-gnu-libc' and omit the object files,
57
- it is simpler to just do this in the source for each such file. */
58
-
59
-#if defined NO_FNMATCH || defined NO_FNMATCH_CASEFOLD || \
60
- defined _LIBC || !defined __GNU_LIBRARY__
61
-
62
-
63
-# if defined STDC_HEADERS || !defined isascii
64
-# define ISASCII(c) 1
65
-# else
66
-# define ISASCII(c) isascii(c)
67
-# endif
68
-
69
-# ifdef isblank
70
-# define ISBLANK(c) (ISASCII (c) && isblank (c))
71
-# else
72
-# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
73
-# endif
74
-# ifdef isgraph
75
-# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
76
-# else
77
-# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
78
-# endif
79
-
80
-# define ISPRINT(c) (ISASCII (c) && isprint (c))
81
-# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
82
-# define ISALNUM(c) (ISASCII (c) && isalnum (c))
83
-# define ISALPHA(c) (ISASCII (c) && isalpha (c))
84
-# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
85
-# define ISLOWER(c) (ISASCII (c) && islower (c))
86
-# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
87
-# define ISSPACE(c) (ISASCII (c) && isspace (c))
88
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
89
-# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
90
-
91
-# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
92
-
93
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
94
-/* The GNU C library provides support for user-defined character classes
95
- and the functions from ISO C amendment 1. */
96
-# ifdef CHARCLASS_NAME_MAX
97
-# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
98
-# else
99
-/* This shouldn't happen but some implementation might still have this
100
- problem. Use a reasonable default value. */
101
-# define CHAR_CLASS_MAX_LENGTH 256
102
-# endif
103
-
104
-# ifdef _LIBC
105
-# define IS_CHAR_CLASS(string) __wctype (string)
106
-# else
107
-# define IS_CHAR_CLASS(string) wctype (string)
108
-# endif
109
-# else
110
-# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
111
-
112
-# define IS_CHAR_CLASS(string) \
113
- (STREQ (string, "alpha") || STREQ (string, "upper") \
114
- || STREQ (string, "lower") || STREQ (string, "digit") \
115
- || STREQ (string, "alnum") || STREQ (string, "xdigit") \
116
- || STREQ (string, "space") || STREQ (string, "print") \
117
- || STREQ (string, "punct") || STREQ (string, "graph") \
118
- || STREQ (string, "cntrl") || STREQ (string, "blank"))
119
-# endif
120
-
121
-/* Avoid depending on library functions or files
122
- whose names are inconsistent. */
123
-
124
-# if !defined _LIBC && !defined getenv
125
-extern char *getenv (const char *name);
126
-# endif
127
-
128
-# ifndef errno
129
-extern int errno;
130
-# endif
131
-
132
-# ifndef NULL
133
-# define NULL 0
134
-# endif
135
-
136
-/* This function doesn't exist on most systems. */
137
-
138
-# if !defined HAVE___STRCHRNUL && !defined _LIBC
139
-static char *
140
-__strchrnul (const char *s, int c)
141
-
142
-
143
-{
144
- char *result = strchr (s, c);
145
- if (result == NULL)
146
- result = strchr (s, '\0');
147
- return result;
148
-}
149
-# endif
150
-
151
-# ifndef internal_function
152
-/* Inside GNU libc we mark some function in a special way. In other
153
- environments simply ignore the marking. */
154
-# define internal_function
155
-# endif
156
-
157
-/* Match STRING against the filename pattern PATTERN, returning zero if
158
- it matches, nonzero if not. */
159
-static int internal_fnmatch __P ((const char *pattern, const char *string,
160
- int no_leading_period, int flags))
161
- internal_function;
162
-static int
163
-internal_function
164
-internal_fnmatch (const char *pattern, const char *string, int no_leading_period, int flags)
165
-
166
-
167
-
168
-
169
-{
170
- register const char *p = pattern, *n = string;
171
- register unsigned char c;
172
-
173
-/* Note that this evaluates C many times. */
174
-# ifdef _LIBC
175
-# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
176
-# else
177
-# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c))
178
-# endif
179
-
180
- while ((c = *p++) != '\0')
181
- {
182
- c = FOLD (c);
183
-
184
- switch (c)
185
- {
186
- case '?':
187
- if (*n == '\0')
188
- return FNM_NOMATCH;
189
- else if (*n == '/' && (flags & FNM_FILE_NAME))
190
- return FNM_NOMATCH;
191
- else if (*n == '.' && no_leading_period
192
- && (n == string
193
- || (n[-1] == '/' && (flags & FNM_FILE_NAME))))
194
- return FNM_NOMATCH;
195
- break;
196
-
197
- case '\\':
198
- if (!(flags & FNM_NOESCAPE))
199
- {
200
- c = *p++;
201
- if (c == '\0')
202
- /* Trailing \ loses. */
203
- return FNM_NOMATCH;
204
- c = FOLD (c);
205
- }
206
- if (FOLD ((unsigned char) *n) != c)
207
- return FNM_NOMATCH;
208
- break;
209
-
210
- case '*':
211
- if (*n == '.' && no_leading_period
212
- && (n == string
213
- || (n[-1] == '/' && (flags & FNM_FILE_NAME))))
214
- return FNM_NOMATCH;
215
-
216
- for (c = *p++; c == '?' || c == '*'; c = *p++)
217
- {
218
- if (*n == '/' && (flags & FNM_FILE_NAME))
219
- /* A slash does not match a wildcard under FNM_FILE_NAME. */
220
- return FNM_NOMATCH;
221
- else if (c == '?')
222
- {
223
- /* A ? needs to match one character. */
224
- if (*n == '\0')
225
- /* There isn't another character; no match. */
226
- return FNM_NOMATCH;
227
- else
228
- /* One character of the string is consumed in matching
229
- this ? wildcard, so *??? won't match if there are
230
- less than three characters. */
231
- ++n;
232
- }
233
- }
234
-
235
- if (c == '\0')
236
- /* The wildcard(s) is/are the last element of the pattern.
237
- If the name is a file name and contains another slash
238
- this does mean it cannot match. */
239
- return ((flags & FNM_FILE_NAME) && strchr (n, '/') != NULL
240
- ? FNM_NOMATCH : 0);
241
- else
242
- {
243
- const char *endp;
244
-
245
- endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0');
246
-
247
- if (c == '[')
248
- {
249
- int flags2 = ((flags & FNM_FILE_NAME)
250
- ? flags : (flags & ~FNM_PERIOD));
251
-
252
- for (--p; n < endp; ++n)
253
- if (internal_fnmatch (p, n,
254
- (no_leading_period
255
- && (n == string
256
- || (n[-1] == '/'
257
- && (flags
258
- & FNM_FILE_NAME)))),
259
- flags2)
260
- == 0)
261
- return 0;
262
- }
263
- else if (c == '/' && (flags & FNM_FILE_NAME))
264
- {
265
- while (*n != '\0' && *n != '/')
266
- ++n;
267
- if (*n == '/'
268
- && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD,
269
- flags) == 0))
270
- return 0;
271
- }
272
- else
273
- {
274
- int flags2 = ((flags & FNM_FILE_NAME)
275
- ? flags : (flags & ~FNM_PERIOD));
276
-
277
- if (c == '\\' && !(flags & FNM_NOESCAPE))
278
- c = *p;
279
- c = FOLD (c);
280
- for (--p; n < endp; ++n)
281
- if (FOLD ((unsigned char) *n) == c
282
- && (internal_fnmatch (p, n,
283
- (no_leading_period
284
- && (n == string
285
- || (n[-1] == '/'
286
- && (flags
287
- & FNM_FILE_NAME)))),
288
- flags2) == 0))
289
- return 0;
290
- }
291
- }
292
-
293
- /* If we come here no match is possible with the wildcard. */
294
- return FNM_NOMATCH;
295
-
296
- case '[':
297
- {
298
- /* Nonzero if the sense of the character class is inverted. */
299
- static int posixly_correct;
300
- register int not;
301
- char cold;
302
-
303
- if (posixly_correct == 0)
304
- posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
305
-
306
- if (*n == '\0')
307
- return FNM_NOMATCH;
308
-
309
- if (*n == '.' && no_leading_period && (n == string
310
- || (n[-1] == '/'
311
- && (flags
312
- & FNM_FILE_NAME))))
313
- return FNM_NOMATCH;
314
-
315
- if (*n == '/' && (flags & FNM_FILE_NAME))
316
- /* `/' cannot be matched. */
317
- return FNM_NOMATCH;
318
-
319
- not = (*p == '!' || (posixly_correct < 0 && *p == '^'));
320
- if (not)
321
- ++p;
322
-
323
- c = *p++;
324
- for (;;)
325
- {
326
- unsigned char fn = FOLD ((unsigned char) *n);
327
-
328
- if (!(flags & FNM_NOESCAPE) && c == '\\')
329
- {
330
- if (*p == '\0')
331
- return FNM_NOMATCH;
332
- c = FOLD ((unsigned char) *p);
333
- ++p;
334
-
335
- if (c == fn)
336
- goto matched;
337
- }
338
- else if (c == '[' && *p == ':')
339
- {
340
- /* Leave room for the null. */
341
- char str[CHAR_CLASS_MAX_LENGTH + 1];
342
- size_t c1 = 0;
343
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
344
- wctype_t wt;
345
-# endif
346
- const char *startp = p;
347
-
348
- for (;;)
349
- {
350
- if (c1 > CHAR_CLASS_MAX_LENGTH)
351
- /* The name is too long and therefore the pattern
352
- is ill-formed. */
353
- return FNM_NOMATCH;
354
-
355
- c = *++p;
356
- if (c == ':' && p[1] == ']')
357
- {
358
- p += 2;
359
- break;
360
- }
361
- if (c < 'a' || c >= 'z')
362
- {
363
- /* This cannot possibly be a character class name.
364
- Match it as a normal range. */
365
- p = startp;
366
- c = '[';
367
- goto normal_bracket;
368
- }
369
- str[c1++] = c;
370
- }
371
- str[c1] = '\0';
372
-
373
-# if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
374
- wt = IS_CHAR_CLASS (str);
375
- if (wt == 0)
376
- /* Invalid character class name. */
377
- return FNM_NOMATCH;
378
-
379
- if (__iswctype (__btowc ((unsigned char) *n), wt))
380
- goto matched;
381
-# else
382
- if ((STREQ (str, "alnum") && ISALNUM ((unsigned char) *n))
383
- || (STREQ (str, "alpha") && ISALPHA ((unsigned char) *n))
384
- || (STREQ (str, "blank") && ISBLANK ((unsigned char) *n))
385
- || (STREQ (str, "cntrl") && ISCNTRL ((unsigned char) *n))
386
- || (STREQ (str, "digit") && ISDIGIT ((unsigned char) *n))
387
- || (STREQ (str, "graph") && ISGRAPH ((unsigned char) *n))
388
- || (STREQ (str, "lower") && ISLOWER ((unsigned char) *n))
389
- || (STREQ (str, "print") && ISPRINT ((unsigned char) *n))
390
- || (STREQ (str, "punct") && ISPUNCT ((unsigned char) *n))
391
- || (STREQ (str, "space") && ISSPACE ((unsigned char) *n))
392
- || (STREQ (str, "upper") && ISUPPER ((unsigned char) *n))
393
- || (STREQ (str, "xdigit") && ISXDIGIT ((unsigned char) *n)))
394
- goto matched;
395
-# endif
396
- }
397
- else if (c == '\0')
398
- /* [ (unterminated) loses. */
399
- return FNM_NOMATCH;
400
- else
401
- {
402
- normal_bracket:
403
- if (FOLD (c) == fn)
404
- goto matched;
405
-
406
- cold = c;
407
- c = *p++;
408
-
409
- if (c == '-' && *p != ']')
410
- {
411
- /* It is a range. */
412
- unsigned char cend = *p++;
413
- if (!(flags & FNM_NOESCAPE) && cend == '\\')
414
- cend = *p++;
415
- if (cend == '\0')
416
- return FNM_NOMATCH;
417
-
418
- if (cold <= fn && fn <= FOLD (cend))
419
- goto matched;
420
-
421
- c = *p++;
422
- }
423
- }
424
-
425
- if (c == ']')
426
- break;
427
- }
428
-
429
- if (!not)
430
- return FNM_NOMATCH;
431
- break;
432
-
433
- matched:
434
- /* Skip the rest of the [...] that already matched. */
435
- while (c != ']')
436
- {
437
- if (c == '\0')
438
- /* [... (unterminated) loses. */
439
- return FNM_NOMATCH;
440
-
441
- c = *p++;
442
- if (!(flags & FNM_NOESCAPE) && c == '\\')
443
- {
444
- if (*p == '\0')
445
- return FNM_NOMATCH;
446
- /* XXX 1003.2d11 is unclear if this is right. */
447
- ++p;
448
- }
449
- else if (c == '[' && *p == ':')
450
- {
451
- do
452
- if (*++p == '\0')
453
- return FNM_NOMATCH;
454
- while (*p != ':' || p[1] == ']');
455
- p += 2;
456
- c = *p;
457
- }
458
- }
459
- if (not)
460
- return FNM_NOMATCH;
461
- }
462
- break;
463
-
464
- default:
465
- if (c != FOLD ((unsigned char) *n))
466
- return FNM_NOMATCH;
467
- }
468
-
469
- ++n;
470
- }
471
-
472
- if (*n == '\0')
473
- return 0;
474
-
475
- if ((flags & FNM_LEADING_DIR) && *n == '/')
476
- /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */
477
- return 0;
478
-
479
- return FNM_NOMATCH;
480
-
481
-# undef FOLD
482
-}
483
-
484
-
485
-int
486
-fnmatch (const char *pattern, const char *string, int flags)
487
-
488
-
489
-
490
-{
491
- return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags);
492
-}
493
-
494
-#endif /* _LIBC or not __GNU_LIBRARY__. */
compat/fnmatch/fnmatch.h
deleted
-84
@@ -1,84 +0,0 @@
1
-/* Copyright (C) 1991, 92, 93, 96, 97, 98, 99 Free Software Foundation, Inc.
2
- This file is part of the GNU C Library.
3
-
4
- The GNU C Library is free software; you can redistribute it and/or
5
- modify it under the terms of the GNU Library General Public License as
6
- published by the Free Software Foundation; either version 2 of the
7
- License, or (at your option) any later version.
8
-
9
- The GNU C Library 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 GNU
12
- Library General Public License for more details.
13
-
14
- You should have received a copy of the GNU Library General Public
15
- License along with the GNU C Library; see the file COPYING.LIB. If not,
16
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
- Boston, MA 02111-1307, USA. */
18
-
19
-#ifndef _FNMATCH_H
20
-#define _FNMATCH_H 1
21
-
22
-#ifdef __cplusplus
23
-extern "C" {
24
-#endif
25
-
26
-#if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32
27
-# if !defined __GLIBC__ || !defined __P
28
-# undef __P
29
-# define __P(protos) protos
30
-# endif
31
-#else /* Not C++ or ANSI C. */
32
-# undef __P
33
-# define __P(protos) ()
34
-/* We can get away without defining `const' here only because in this file
35
- it is used only inside the prototype for `fnmatch', which is elided in
36
- non-ANSI C where `const' is problematical. */
37
-#endif /* C++ or ANSI C. */
38
-
39
-#ifndef const
40
-# if (defined __STDC__ && __STDC__) || defined __cplusplus
41
-# define __const const
42
-# else
43
-# define __const
44
-# endif
45
-#endif
46
-
47
-/* We #undef these before defining them because some losing systems
48
- (HP-UX A.08.07 for example) define these in <unistd.h>. */
49
-#undef FNM_PATHNAME
50
-#undef FNM_NOESCAPE
51
-#undef FNM_PERIOD
52
-
53
-/* Bits set in the FLAGS argument to `fnmatch'. */
54
-#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */
55
-#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */
56
-#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */
57
-
58
-#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
59
-# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */
60
-# define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */
61
-# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */
62
-#endif
63
-
64
-/* Value returned by `fnmatch' if STRING does not match PATTERN. */
65
-#define FNM_NOMATCH 1
66
-
67
-/* This value is returned if the implementation does not support
68
- `fnmatch'. Since this is not the case here it will never be
69
- returned but the conformance test suites still require the symbol
70
- to be defined. */
71
-#ifdef _XOPEN_SOURCE
72
-# define FNM_NOSYS (-1)
73
-#endif
74
-
75
-/* Match NAME against the filename pattern PATTERN,
76
- returning zero if it matches, FNM_NOMATCH if not. */
77
-extern int fnmatch __P ((__const char *__pattern, __const char *__name,
78
- int __flags));
79
-
80
-#ifdef __cplusplus
81
-}
82
-#endif
83
-
84
-#endif /* fnmatch.h */