diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1997-09-22 05:25:50 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1997-09-22 05:25:50 +0000 |
commit | 60e1b12fa81aba493d57be4b0633f029018d923d (patch) | |
tree | 66df962ef585aa89db467dcc628841dfa6ba7f22 | |
parent | 49eb8826b3b85644bd7d1b814cd88e1a32edfdc7 (diff) |
Use our own fnmatch().
-rw-r--r-- | gnu/usr.sbin/mkisofs/Makefile | 4 | ||||
-rw-r--r-- | gnu/usr.sbin/mkisofs/fnmatch.c | 227 | ||||
-rw-r--r-- | gnu/usr.sbin/mkisofs/fnmatch.h | 81 | ||||
-rw-r--r-- | gnu/usr.sbin/mkisofs/match.h | 4 |
4 files changed, 4 insertions, 312 deletions
diff --git a/gnu/usr.sbin/mkisofs/Makefile b/gnu/usr.sbin/mkisofs/Makefile index 427e908c743..85ea7a1397e 100644 --- a/gnu/usr.sbin/mkisofs/Makefile +++ b/gnu/usr.sbin/mkisofs/Makefile @@ -1,10 +1,10 @@ -# $OpenBSD: Makefile,v 1.2 1997/09/17 03:29:31 downsj Exp $ +# $OpenBSD: Makefile,v 1.3 1997/09/22 05:25:48 millert Exp $ PROG= mkisofs MAN= mkisofs.8 SRCS= mkisofs.c tree.c write.c hash.c rock.c exclude.c multi.c \ - files.c fnmatch.c match.c name.c eltorito.c + files.c match.c name.c eltorito.c CFLAGS+=-DSYSTEM_ID_DEFAULT=\"OpenBSD\" -I${.CURDIR} diff --git a/gnu/usr.sbin/mkisofs/fnmatch.c b/gnu/usr.sbin/mkisofs/fnmatch.c deleted file mode 100644 index 6e7c110e047..00000000000 --- a/gnu/usr.sbin/mkisofs/fnmatch.c +++ /dev/null @@ -1,227 +0,0 @@ -/* $OpenBSD: fnmatch.c,v 1.1 1997/09/15 06:01:52 downsj Exp $ */ -/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -NOTE: The canonical source of this file is maintained with the GNU C Library. -Bugs can be reported to bug-glibc@prep.ai.mit.edu. - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -static char rcsid[] ="$From: fnmatch.c,v 1.3 1997/03/22 02:53:13 eric Rel $"; - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <errno.h> -#include <fnmatch.h> - -#ifndef FNM_FILE_NAME -#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ -#endif - -#ifndef FNM_LEADING_DIR -#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ -#endif - -#ifndef FNM_CASEFOLD -#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ -#endif - - -#include <ctype.h> - -#if defined (STDC_HEADERS) || !defined (isascii) -#define ISASCII(c) 1 -#else -#define ISASCII(c) isascii(c) -#endif - -#define ISUPPER(c) (ISASCII (c) && isupper (c)) - - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#if defined (_LIBC) || !defined (__GNU_LIBRARY__) - - -#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS) -extern int errno; -#endif - -/* Match STRING against the filename pattern PATTERN, returning zero if - it matches, nonzero if not. */ -int -fnmatch (pattern, string, flags) - const char *pattern; - const char *string; - int flags; -{ - register const char *p = pattern, *n = string; - register char c; - -/* Note that this evalutes C many times. */ -#define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) - - while ((c = *p++) != '\0') - { - c = FOLD (c); - - switch (c) - { - case '?': - if (*n == '\0') - return FNM_NOMATCH; - else if ((flags & FNM_FILE_NAME) && *n == '/') - return FNM_NOMATCH; - else if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - break; - - case '\\': - if (!(flags & FNM_NOESCAPE)) - { - c = *p++; - c = FOLD (c); - } - if (FOLD (*n) != c) - return FNM_NOMATCH; - break; - - case '*': - if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - - for (c = *p++; c == '?' || c == '*'; c = *p++, ++n) - if (((flags & FNM_FILE_NAME) && *n == '/') || - (c == '?' && *n == '\0')) - return FNM_NOMATCH; - - if (c == '\0') - return 0; - - { - char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c; - c1 = FOLD (c1); - for (--p; *n != '\0'; ++n) - if ((c == '[' || FOLD (*n) == c1) && - fnmatch (p, n, flags & ~FNM_PERIOD) == 0) - return 0; - return FNM_NOMATCH; - } - - case '[': - { - /* Nonzero if the sense of the character class is inverted. */ - register int not; - - if (*n == '\0') - return FNM_NOMATCH; - - if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; - - not = (*p == '!' || *p == '^'); - if (not) - ++p; - - c = *p++; - for (;;) - { - register char cstart = c, cend = c; - - if (!(flags & FNM_NOESCAPE) && c == '\\') - cstart = cend = *p++; - - cstart = cend = FOLD (cstart); - - if (c == '\0') - /* [ (unterminated) loses. */ - return FNM_NOMATCH; - - c = *p++; - c = FOLD (c); - - if ((flags & FNM_FILE_NAME) && c == '/') - /* [/] can never match. */ - return FNM_NOMATCH; - - if (c == '-' && *p != ']') - { - cend = *p++; - if (!(flags & FNM_NOESCAPE) && cend == '\\') - cend = *p++; - if (cend == '\0') - return FNM_NOMATCH; - cend = FOLD (cend); - - c = *p++; - } - - if (FOLD (*n) >= cstart && FOLD (*n) <= cend) - goto matched; - - if (c == ']') - break; - } - if (!not) - return FNM_NOMATCH; - break; - - matched:; - /* Skip the rest of the [...] that already matched. */ - while (c != ']') - { - if (c == '\0') - /* [... (unterminated) loses. */ - return FNM_NOMATCH; - - c = *p++; - if (!(flags & FNM_NOESCAPE) && c == '\\') - /* XXX 1003.2d11 is unclear if this is right. */ - ++p; - } - if (not) - return FNM_NOMATCH; - } - break; - - default: - if (c != FOLD (*n)) - return FNM_NOMATCH; - } - - ++n; - } - - if (*n == '\0') - return 0; - - if ((flags & FNM_LEADING_DIR) && *n == '/') - /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ - return 0; - - return FNM_NOMATCH; -} - -#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/gnu/usr.sbin/mkisofs/fnmatch.h b/gnu/usr.sbin/mkisofs/fnmatch.h deleted file mode 100644 index ffca8351d27..00000000000 --- a/gnu/usr.sbin/mkisofs/fnmatch.h +++ /dev/null @@ -1,81 +0,0 @@ -/* $OpenBSD: fnmatch.h,v 1.1 1997/09/15 06:01:52 downsj Exp $ */ -/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -NOTE: The canonical source of this file is maintained with the GNU C Library. -Bugs can be reported to bug-glibc@prep.ai.mit.edu. - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* - * $From: fnmatch.h,v 1.1 1997/02/23 15:54:20 eric Rel $ - */ - -#ifndef _FNMATCH_H - -#define _FNMATCH_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__cplusplus) || (defined (__STDC__) && __STDC__) -#undef __P -#define __P(protos) protos -#else /* Not C++ or ANSI C. */ -#undef __P -#define __P(protos) () -/* We can get away without defining `const' here only because in this file - it is used only inside the prototype for `fnmatch', which is elided in - non-ANSI C where `const' is problematical. */ -#endif /* C++ or ANSI C. */ - - -/* We #undef these before defining them because some losing systems - (HP-UX A.08.07 for example) define these in <unistd.h>. */ -#undef FNM_PATHNAME -#undef FNM_NOESCAPE -#undef FNM_PERIOD - -/* Bits set in the FLAGS argument to `fnmatch'. */ -#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ -#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ -#define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ - -#if !defined (_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 2 || defined (_GNU_SOURCE) -#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ -#define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ -#define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ -#endif - -#ifndef FNM_FILE_NAME - /* - * Apparently GNU libc doesn't define this thing. - */ -#define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ -#endif - -/* Value returned by `fnmatch' if STRING does not match PATTERN. */ -#define FNM_NOMATCH 1 - -/* Match STRING against the filename pattern PATTERN, - returning zero if it matches, FNM_NOMATCH if not. */ -extern int fnmatch __P ((const char *__pattern, const char *__string, - int __flags)); - -#ifdef __cplusplus -} -#endif - -#endif /* fnmatch.h */ diff --git a/gnu/usr.sbin/mkisofs/match.h b/gnu/usr.sbin/mkisofs/match.h index 395d42d0144..68314d26340 100644 --- a/gnu/usr.sbin/mkisofs/match.h +++ b/gnu/usr.sbin/mkisofs/match.h @@ -1,4 +1,4 @@ -/* $OpenBSD: match.h,v 1.1 1997/09/15 06:01:53 downsj Exp $ */ +/* $OpenBSD: match.h,v 1.2 1997/09/22 05:25:49 millert Exp $ */ /* * 27th March 1996. Added by Jan-Piet Mens for matching regular expressions * in paths. @@ -9,7 +9,7 @@ * $From: match.h,v 1.1 1997/02/23 15:56:12 eric Rel $ */ -#include "fnmatch.h" +#include <fnmatch.h> void add_match(); int matches(); |