From: Bruno Haible Date: Wed, 12 Jan 2005 12:36:38 +0000 (+0000) Subject: Update 'fnmatch' module from gnulib. X-Git-Tag: v0.14.2~179 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=94a9388f5699de3a908507460fd97a785c1bbdfd;p=thirdparty%2Fgettext.git Update 'fnmatch' module from gnulib. --- diff --git a/gettext-tools/ChangeLog b/gettext-tools/ChangeLog index 01979c9ae..d1c15e070 100644 --- a/gettext-tools/ChangeLog +++ b/gettext-tools/ChangeLog @@ -1,3 +1,8 @@ +2005-01-06 Bruno Haible + + * Makefile.am (config.h_vms, config.h.msvc): Define HAVE_WMEMCHR and + HAVE_WMEMCPY to 1. + 2005-01-06 Bruno Haible * Makefile.am (config.h_vms, config.h.msvc): Define USE_UNLOCKED_IO diff --git a/gettext-tools/Makefile.am b/gettext-tools/Makefile.am index 3b2d1bb1a..e1d34b148 100644 --- a/gettext-tools/Makefile.am +++ b/gettext-tools/Makefile.am @@ -127,6 +127,8 @@ config.h_vms: config.h.in ../version.sh -e 's/#undef HAVE_WCTYPE_H$$/#define HAVE_WCTYPE_H 1/' \ -e 's/#undef HAVE_WCWIDTH$$/#define HAVE_WCWIDTH 1/' \ -e 's/#undef HAVE_WINT_T$$/#define HAVE_WINT_T 1/' \ + -e 's/#undef HAVE_WMEMCHR$$/#define HAVE_WMEMCHR 1/' \ + -e 's/#undef HAVE_WMEMCPY$$/#define HAVE_WMEMCPY 1/' \ -e 's/#undef HAVE_WORKING_VFORK$$/#define HAVE_WORKING_VFORK 1/' \ -e 's/#undef HAVE_WPRINTF$$/#define HAVE_WPRINTF 1/' \ -e 's/#undef ICONV_CONST$$/#define ICONV_CONST/' \ @@ -197,6 +199,8 @@ config.h.msvc: config.h.in ../version.sh -e 's/#undef HAVE_WCHAR_H$$/#define HAVE_WCHAR_H 1/' \ -e 's/#undef HAVE_WCSLEN$$/#define HAVE_WCSLEN 1/' \ -e 's/#undef HAVE_WINT_T$$/#define HAVE_WINT_T 1/' \ + -e 's/#undef HAVE_WMEMCHR$$/#define HAVE_WMEMCHR 1/' \ + -e 's/#undef HAVE_WMEMCPY$$/#define HAVE_WMEMCPY 1/' \ -e 's/#undef HAVE_WPRINTF$$/#define HAVE_WPRINTF 1/' \ -e 's/#undef ICONV_CONST$$/#define ICONV_CONST const/' \ -e 's/#undef MALLOC_0_IS_NONNULL$$/#define MALLOC_0_IS_NONNULL 1/' \ diff --git a/gettext-tools/lib/ChangeLog b/gettext-tools/lib/ChangeLog index e49393917..c159eec6d 100644 --- a/gettext-tools/lib/ChangeLog +++ b/gettext-tools/lib/ChangeLog @@ -1,3 +1,13 @@ +2005-01-06 Bruno Haible + + * fnmatch_.h: Upgrade from gnulib. + * fnmatch.c: Upgrade from gnulib. + * fnmatch_loop.c: New file, from gnulib. + * Makefile.am (DISTCLEANFILES): Remove fnmatch.h. + (BUILT_SOURCES): New variable. + (EXTRA_DIST): Add fnmatch_loop.c. + * Makefile.vms (fnmatch.obj): Depend also on fnmatch_loop.c. + 2004-12-19 Paul Eggert * alloca_.h: Conditionalize on _GNULIB_ALLOCA_H, not _ALLOCA_H. diff --git a/gettext-tools/lib/Makefile.am b/gettext-tools/lib/Makefile.am index 5552ac45a..0086428a0 100644 --- a/gettext-tools/lib/Makefile.am +++ b/gettext-tools/lib/Makefile.am @@ -1,5 +1,5 @@ ## Makefile for the gettext-tools/lib subdirectory of GNU gettext -## Copyright (C) 1995-1998, 2000-2004 Free Software Foundation, Inc. +## Copyright (C) 1995-1998, 2000-2005 Free Software Foundation, Inc. ## ## 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 @@ -19,6 +19,7 @@ AUTOMAKE_OPTIONS = 1.5 gnits no-dependencies EXTRA_DIST = +BUILT_SOURCES = MOSTLYCLEANFILES = CLEANFILES = DISTCLEANFILES = @@ -154,9 +155,6 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I.. -I../intl -I$(top_srcdir)/intl DEFS = -DEXEEXT=\"$(EXEEXT)\" -DDEPENDS_ON_LIBINTL=1 -DDEPENDS_ON_LIBICONV=1 @DEFS@ -DISTCLEANFILES += fnmatch.h - - # >>> gnulib module stdbool. EXTRA_DIST += stdbool_.h @@ -182,7 +180,8 @@ MOSTLYCLEANFILES += alloca.h # >>> gnulib module fnmatch. -EXTRA_DIST += fnmatch_.h +BUILT_SOURCES += $(FNMATCH_H) +EXTRA_DIST += fnmatch_.h fnmatch_loop.c # The following is needed in order to create an when the system # doesn't have one that works. diff --git a/gettext-tools/lib/Makefile.vms b/gettext-tools/lib/Makefile.vms index 04b789122..4170dde56 100644 --- a/gettext-tools/lib/Makefile.vms +++ b/gettext-tools/lib/Makefile.vms @@ -232,7 +232,7 @@ xerror.obj : xerror.c xsetenv.obj : xsetenv.c $(CC) $(INCLUDES) $(CFLAGS) /define=($(DEFS)) xsetenv.c -fnmatch.obj : fnmatch.c fnmatch.h +fnmatch.obj : fnmatch.c fnmatch.h fnmatch_loop.c $(CC) $(INCLUDES) $(CFLAGS) /define=($(DEFS)) fnmatch.c getline.obj : getline.c diff --git a/gettext-tools/lib/fnmatch.c b/gettext-tools/lib/fnmatch.c index 209d598b7..011a14503 100644 --- a/gettext-tools/lib/fnmatch.c +++ b/gettext-tools/lib/fnmatch.c @@ -1,5 +1,5 @@ -/* POSIX fnmatch(). - Copyright 1991-1993, 1996-1997, 2000-2002 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004 + Free Software Foundation, Inc. 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 @@ -11,198 +11,376 @@ 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, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#if HAVE_CONFIG_H +# include +#endif /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif -#if HAVE_CONFIG_H -# include +#if ! defined __builtin_expect && __GNUC__ < 3 +# define __builtin_expect(expr, expected) (expr) #endif -/* Specification. */ -#include "fnmatch.h" +#include +#include +#include +#include #include +#include +#include +#include +#include + +#define WIDE_CHAR_SUPPORT \ + (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC \ + && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) + +/* For platform which support the ISO C amendement 1 functionality we + support user defined character classes. */ +#if defined _LIBC || WIDE_CHAR_SUPPORT +/* Solaris 2.5 has a bug: must be included before . */ +# include +# include +#endif +/* We need some of the locale data (the collation sequence information) + but there is no interface to get this information in general. Therefore + we support a correct implementation only in glibc. */ +#ifdef _LIBC +# include "../locale/localeinfo.h" +# include "../locale/elem-hash.h" +# include "../locale/coll-lookup.h" +# include + +# define CONCAT(a,b) __CONCAT(a,b) +# define mbsrtowcs __mbsrtowcs +# define fnmatch __fnmatch +extern int fnmatch (const char *pattern, const char *string, int flags); +#endif -/* Match STRING against the filename pattern PATTERN, returning zero if - it matches, nonzero if not. */ -int -fnmatch (const char *pattern, const char *string, int flags) +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ +#define NO_LEADING_PERIOD(flags) \ + ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and have not detected a bug + in the library. 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__ || !HAVE_FNMATCH_GNU + + +# if defined STDC_HEADERS || !defined isascii +# define ISASCII(c) 1 +# else +# define ISASCII(c) isascii(c) +# endif + +# ifdef isblank +# define ISBLANK(c) (ISASCII (c) && isblank (c)) +# else +# define ISBLANK(c) ((c) == ' ' || (c) == '\t') +# endif +# ifdef isgraph +# define ISGRAPH(c) (ISASCII (c) && isgraph (c)) +# else +# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) +# endif + +# define ISPRINT(c) (ISASCII (c) && isprint (c)) +# define ISDIGIT(c) (ISASCII (c) && isdigit (c)) +# define ISALNUM(c) (ISASCII (c) && isalnum (c)) +# define ISALPHA(c) (ISASCII (c) && isalpha (c)) +# define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) +# define ISLOWER(c) (ISASCII (c) && islower (c)) +# define ISPUNCT(c) (ISASCII (c) && ispunct (c)) +# define ISSPACE(c) (ISASCII (c) && isspace (c)) +# define ISUPPER(c) (ISASCII (c) && isupper (c)) +# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) + +# define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) + +# if defined _LIBC || WIDE_CHAR_SUPPORT +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendement 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# ifdef _LIBC +# define IS_CHAR_CLASS(string) __wctype (string) +# else +# define IS_CHAR_CLASS(string) wctype (string) +# endif + +# ifdef _LIBC +# define ISWCTYPE(WC, WT) __iswctype (WC, WT) +# else +# define ISWCTYPE(WC, WT) iswctype (WC, WT) +# endif + +# if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC +/* In this case we are implementing the multibyte character handling. */ +# define HANDLE_MULTIBYTE 1 +# endif + +# else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +/* Global variable. */ +static int posixly_correct; + +# ifndef internal_function +/* Inside GNU libc we mark some function in a special way. In other + environments simply ignore the marking. */ +# define internal_function +# endif + +/* Note that this evaluates C many times. */ +# ifdef _LIBC +# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +# else +# define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) +# endif +# define CHAR char +# define UCHAR unsigned char +# define INT int +# define FCT internal_fnmatch +# define EXT ext_match +# define END end_pattern +# define L(CS) CS +# ifdef _LIBC +# define BTOWC(C) __btowc (C) +# else +# define BTOWC(C) btowc (C) +# endif +# define STRLEN(S) strlen (S) +# define STRCAT(D, S) strcat (D, S) +# ifdef _LIBC +# define MEMPCPY(D, S, N) __mempcpy (D, S, N) +# else +# if HAVE_MEMPCPY +# define MEMPCPY(D, S, N) mempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) +# endif +# endif +# define MEMCHR(S, C, N) memchr (S, C, N) +# define STRCOLL(S1, S2) strcoll (S1, S2) +# include "fnmatch_loop.c" + + +# if HANDLE_MULTIBYTE +# define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) +# define CHAR wchar_t +# define UCHAR wint_t +# define INT wint_t +# define FCT internal_fnwmatch +# define EXT ext_wmatch +# define END end_wpattern +# define L(CS) L##CS +# define BTOWC(C) (C) +# ifdef _LIBC +# define STRLEN(S) __wcslen (S) +# define STRCAT(D, S) __wcscat (D, S) +# define MEMPCPY(D, S, N) __wmempcpy (D, S, N) +# else +# define STRLEN(S) wcslen (S) +# define STRCAT(D, S) wcscat (D, S) +# if HAVE_WMEMPCPY +# define MEMPCPY(D, S, N) wmempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) +# endif +# endif +# define MEMCHR(S, C, N) wmemchr (S, C, N) +# define STRCOLL(S1, S2) wcscoll (S1, S2) +# define WIDE_CHAR_VERSION 1 + +# undef IS_CHAR_CLASS +/* We have to convert the wide character string in a multibyte string. But + we know that the character class names consist of alphanumeric characters + from the portable character set, and since the wide character encoding + for a member of the portable character set is the same code point as + its single-byte encoding, we can use a simplified method to convert the + string to a multibyte character string. */ +static wctype_t +is_char_class (const wchar_t *wcs) { - register const char *p = pattern, *n = string; - register char c; + char s[CHAR_CLASS_MAX_LENGTH + 1]; + char *cp = s; - while ((c = *p++) != '\0') + do { - switch (c) + /* Test for a printable character from the portable character set. */ +# ifdef _LIBC + if (*wcs < 0x20 || *wcs > 0x7e + || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) + return (wctype_t) 0; +# else + switch (*wcs) { - 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; + case L' ': case L'!': case L'"': case L'#': case L'%': + case L'&': case L'\'': case L'(': case L')': case L'*': + case L'+': case L',': case L'-': case L'.': case L'/': + case L'0': case L'1': case L'2': case L'3': case L'4': + case L'5': case L'6': case L'7': case L'8': case L'9': + case L':': case L';': case L'<': case L'=': case L'>': + case L'?': + case L'A': case L'B': case L'C': case L'D': case L'E': + case L'F': case L'G': case L'H': case L'I': case L'J': + case L'K': case L'L': case L'M': case L'N': case L'O': + case L'P': case L'Q': case L'R': case L'S': case L'T': + case L'U': case L'V': case L'W': case L'X': case L'Y': + case L'Z': + case L'[': case L'\\': case L']': case L'^': case L'_': + case L'a': case L'b': case L'c': case L'd': case L'e': + case L'f': case L'g': case L'h': case L'i': case L'j': + case L'k': case L'l': case L'm': case L'n': case L'o': + case L'p': case L'q': case L'r': case L's': case L't': + case L'u': case L'v': case L'w': case L'x': case L'y': + case L'z': case L'{': case L'|': case L'}': case L'~': break; + default: + return (wctype_t) 0; + } +# endif - case '\\': - if (!(flags & FNM_NOESCAPE)) - { - c = *p++; - if (c == '\0') - /* Trailing \ loses. */ - return FNM_NOMATCH; - } - if (*n != c) - return FNM_NOMATCH; - break; + /* Avoid overrunning the buffer. */ + if (cp == s + CHAR_CLASS_MAX_LENGTH) + return (wctype_t) 0; - case '*': - if ((flags & FNM_PERIOD) && *n == '.' && - (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/'))) - return FNM_NOMATCH; + *cp++ = (char) *wcs++; + } + while (*wcs != L'\0'); - for (c = *p++; c == '?' || c == '*'; c = *p++) - { - if (c == '?') - { - /* A ? needs to match one character. */ - if (*n == '\0' || (*n == '/' && (flags & FNM_FILE_NAME))) - /* There isn't another character; no match. */ - return FNM_NOMATCH; - else - /* One character of the string is consumed in matching - this ? wildcard, so *??? won't match if there are - less than three characters. */ - ++n; - } - } + *cp = '\0'; - if (c == '\0') - { - if ((flags & (FNM_FILE_NAME | FNM_LEADING_DIR)) == FNM_FILE_NAME) - for (; *n != '\0'; n++) - if (*n == '/') - return FNM_NOMATCH; - return 0; - } +# ifdef _LIBC + return __wctype (s); +# else + return wctype (s); +# endif +} +# define IS_CHAR_CLASS(string) is_char_class (string) - { - char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c; - for (--p; *n != '\0'; ++n) - if ((c == '[' || *n == c1) && - fnmatch (p, n, flags & ~FNM_PERIOD) == 0) - return 0; - else if (*n == '/' && (flags & FNM_FILE_NAME)) - break; - 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 == '\\') - { - if (*p == '\0') - return FNM_NOMATCH; - cstart = cend = *p++; - } - - cend = cstart; - - if (c == '\0') - /* [ (unterminated) loses. */ - return FNM_NOMATCH; - - c = *p++; - - 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; - - c = *p++; - } - - if ((unsigned char) *n >= (unsigned char) cstart - && (unsigned char) *n <= (unsigned char) 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 == '\\') - { - if (*p == '\0') - return FNM_NOMATCH; - /* XXX 1003.2d11 is unclear if this is right. */ - ++p; - } - } - if (not) - return FNM_NOMATCH; - } - break; +# include "fnmatch_loop.c" +# endif - default: - if (c != *n) - return FNM_NOMATCH; + +int +fnmatch (const char *pattern, const char *string, int flags) +{ +# if HANDLE_MULTIBYTE +# define ALLOCA_LIMIT 2000 + if (__builtin_expect (MB_CUR_MAX, 1) != 1) + { + mbstate_t ps; + size_t patsize; + size_t strsize; + size_t totsize; + wchar_t *wpattern; + wchar_t *wstring; + int res; + + /* Calculate the size needed to convert the strings to + wide characters. */ + memset (&ps, '\0', sizeof (ps)); + patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; + if (__builtin_expect (patsize == 0, 0)) + /* Something wrong. + XXX Do we have to set `errno' to something which mbsrtows hasn't + already done? */ + return -1; + assert (mbsinit (&ps)); + strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; + if (__builtin_expect (strsize == 0, 0)) + /* Something wrong. + XXX Do we have to set `errno' to something which mbsrtows hasn't + already done? */ + return -1; + assert (mbsinit (&ps)); + totsize = patsize + strsize; + if (__builtin_expect (! (patsize <= totsize + && totsize <= SIZE_MAX / sizeof (wchar_t)), + 0)) + { + errno = ENOMEM; + return -1; } - ++n; - } + /* Allocate room for the wide characters. */ + if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) + wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); + else + { + wpattern = malloc (totsize * sizeof (wchar_t)); + if (__builtin_expect (! wpattern, 0)) + { + errno = ENOMEM; + return -1; + } + } + wstring = wpattern + patsize; + + /* Convert the strings into wide characters. */ + mbsrtowcs (wpattern, &pattern, patsize, &ps); + assert (mbsinit (&ps)); + mbsrtowcs (wstring, &string, strsize, &ps); - if (*n == '\0') - return 0; + res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, + flags & FNM_PERIOD, flags); - if ((flags & FNM_LEADING_DIR) && *n == '/') - /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ - return 0; + if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) + free (wpattern); + return res; + } +# endif /* HANDLE_MULTIBYTE */ - return FNM_NOMATCH; + return internal_fnmatch (pattern, string, string + strlen (string), + flags & FNM_PERIOD, flags); } + +# ifdef _LIBC +# undef fnmatch +versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); +# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) +strong_alias (__fnmatch, __fnmatch_old) +compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); +# endif +libc_hidden_ver (__fnmatch, fnmatch) +# endif + +#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/gettext-tools/lib/fnmatch_.h b/gettext-tools/lib/fnmatch_.h index c2d2a3639..87e661f72 100644 --- a/gettext-tools/lib/fnmatch_.h +++ b/gettext-tools/lib/fnmatch_.h @@ -1,10 +1,10 @@ -/* POSIX . - Copyright (C) 1991-1993, 2001-2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003 + Free Software Foundation, Inc. - 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 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 @@ -16,38 +16,48 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _FNMATCH_H -#define _FNMATCH_H 1 +# define _FNMATCH_H 1 -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif - +# endif /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in . */ -#undef FNM_PATHNAME -#undef FNM_NOESCAPE -#undef FNM_PERIOD +# 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. */ +# 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. */ -#endif +# 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. */ +# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ +# endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ -#define FNM_NOMATCH 1 +# define FNM_NOMATCH 1 + +/* This value is returned if the implementation does not support + `fnmatch'. Since this is not the case here it will never be + returned but the conformance test suites still require the symbol + to be defined. */ +# ifdef _XOPEN_SOURCE +# define FNM_NOSYS (-1) +# endif -/* Match STRING against the filename pattern PATTERN, +/* Match NAME against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ -extern int fnmatch (const char *__pattern, const char *__string, int __flags); +extern int fnmatch (const char *__pattern, const char *__name, + int __flags); -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif /* fnmatch.h */ diff --git a/gettext-tools/m4/ChangeLog b/gettext-tools/m4/ChangeLog index cc347fda5..fe134683d 100644 --- a/gettext-tools/m4/ChangeLog +++ b/gettext-tools/m4/ChangeLog @@ -1,3 +1,7 @@ +2005-01-06 Bruno Haible + + * fnmatch.m4: Upgrade from gnulib. + 2005-01-06 Bruno Haible * stdbool.m4: Upgrade to gnulib version. @@ -32,6 +36,10 @@ * extensions.m4 (gl_USE_SYSTEM_EXTENSIONS): Require AC_AIX and AC_MINIX, too, so that their extensions are available. +2003-09-10 Bruno Haible + + * xreadlink.m4 (gl_XREADLINK): Remove check. + 2003-09-10 Bruno Haible * setenv.m4 (gl_PREREQ_SETENV, gl_PREREQ_UNSETENV): Remove diff --git a/gettext-tools/m4/fnmatch.m4 b/gettext-tools/m4/fnmatch.m4 index befb73e27..92a8f2b58 100644 --- a/gettext-tools/m4/fnmatch.m4 +++ b/gettext-tools/m4/fnmatch.m4 @@ -3,7 +3,7 @@ # This is a modified version of autoconf's AC_FUNC_FNMATCH. # This file should be simplified after Autoconf 2.57 is required. -# Copyright (C) 2000-2003 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # 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 @@ -28,10 +28,10 @@ AC_DEFUN([_AC_FUNC_FNMATCH_IF], [AC_CACHE_CHECK( [for working $1 fnmatch], [$2], - [# Some versions of Solaris, SCO, and the GNU C Library - # have a broken or incompatible fnmatch. - # So we run a test program. If we are cross-compiling, take no chance. - # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test. + [dnl Some versions of Solaris, SCO, and the GNU C Library + dnl have a broken or incompatible fnmatch. + dnl So we run a test program. If we are cross-compiling, take no chance. + dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this test. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [ @@ -70,21 +70,13 @@ AC_DEFUN([_AC_LIBOBJ_FNMATCH], AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_TYPE_MBSTATE_T])dnl AC_CHECK_DECLS([getenv]) -AC_CHECK_FUNCS([btowc mbsrtowcs mempcpy wmempcpy]) +AC_CHECK_FUNCS([btowc mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy]) AC_CHECK_HEADERS([wchar.h wctype.h]) AC_LIBOBJ([fnmatch]) FNMATCH_H=fnmatch.h ])# _AC_LIBOBJ_FNMATCH -# Additional prerequisites of lib/fnmatch.c, not part of _AC_LIBOBJ_FNMATCH. -AC_DEFUN([gl_PREREQ_FNMATCH_EXTRA], -[ - AC_REQUIRE([AC_HEADER_STDC]) - AC_CHECK_HEADERS_ONCE(string.h strings.h) -]) - - AC_DEFUN([gl_FUNC_FNMATCH_POSIX], [ FNMATCH_H= @@ -92,7 +84,6 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX], [rm -f lib/fnmatch.h], [_AC_LIBOBJ_FNMATCH]) if test $ac_cv_func_fnmatch_posix != yes; then - gl_PREREQ_FNMATCH_EXTRA dnl We must choose a different name for our function, since on ELF systems dnl a broken fnmatch() in libc.so would override our fnmatch() if it is dnl compiled into a shared library. @@ -113,7 +104,6 @@ AC_DEFUN([gl_FUNC_FNMATCH_GNU], [rm -f lib/fnmatch.h], [_AC_LIBOBJ_FNMATCH]) if test $ac_cv_func_fnmatch_gnu != yes; then - gl_PREREQ_FNMATCH_EXTRA dnl We must choose a different name for our function, since on ELF systems dnl a broken fnmatch() in libc.so would override our fnmatch() if it is dnl compiled into a shared library.