diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | inet/Versions | 4 | ||||
-rw-r--r-- | posix/fnmatch.c | 37 | ||||
-rw-r--r-- | posix/fnmatch_loop.c | 5 |
4 files changed, 53 insertions, 7 deletions
@@ -1,3 +1,17 @@ +2000-01-18 Bruno Haible <haible@ilog.fr> + + * posix/fnmatch.c (ISWCTYPE): New macro. + (__wcschrnul): New function. + (BTOWC): New macro. Define it instead of __btowc. + (is_char_class) [!_LIBC]: Fix 'mstate_t' typo. Fix 2nd arg to + wcsrtombs. Call wctype, not __wctype. + * posix/fnmatch_loop.c (FCT): Use ISWCTYPE instead of __iswctype, and + BTOWC instead of __btowc. + +2000-01-18 Andreas Jaeger <aj@suse.de> + + * inet/Versions: Add new functions added on 2000-01-17. + 2000-01-18 Jakub Jelinek <jakub@redhat.com> * dirent/dirent.h (getdentries): Correct prototype to use __off64_t. diff --git a/inet/Versions b/inet/Versions index df97f6188a..4ce6bf6f9a 100644 --- a/inet/Versions +++ b/inet/Versions @@ -67,5 +67,9 @@ libc { freehostent; # g* getipnodebyaddr; + # i* + iruserok_af; + # r* + rcmd_af; rexec_af; rrsesvport_af; ruserok_af; } } diff --git a/posix/fnmatch.c b/posix/fnmatch.c index 2dbebfe31e..85a50efbd8 100644 --- a/posix/fnmatch.c +++ b/posix/fnmatch.c @@ -106,6 +106,12 @@ # 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 @@ -149,6 +155,19 @@ __strchrnul (s, c) } # endif +# if HANDLE_MULTIBYTE && !defined HAVE___STRCHRNUL && !defined _LIBC +static wchar_t * +__wcschrnul (s, c) + const wchar_t *s; + wint_t c; +{ + wchar_t *result = wcschr (s, c); + if (result == NULL) + result = wcschr (s, '\0'); + return result; +} +# endif + # ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ @@ -165,6 +184,11 @@ __strchrnul (s, c) # define UCHAR unsigned char # define FCT internal_fnmatch # define L(CS) CS +# ifdef _LIBC +# define BTOWC(C) __btowc (C) +# else +# define BTOWC(C) btowc (C) +# endif # define STRCHR(S, C) strchr (S, C) # define STRCHRNUL(S, C) __strchrnul (S, C) # include "fnmatch_loop.c" @@ -181,7 +205,7 @@ __strchrnul (s, c) # define UCHAR wint_t # define FCT internal_fnwmatch # define L(CS) L##CS -# define __btowc(wc) wc +# define BTOWC(C) (C) # define STRCHR(S, C) wcschr (S, C) # define STRCHRNUL(S, C) __wcschrnul (S, C) @@ -214,22 +238,25 @@ is_char_class (const wchar_t *wcs) static wctype_t is_char_class (const wchar_t *wcs) { - mstate_t ps; + mbstate_t ps; + const wchar_t *pwc; char *s; size_t n; memset (&ps, '\0', sizeof (ps)); - n = wcsrtombs (NULL, wcs, 0, &ps); + pwc = wcs; + n = wcsrtombs (NULL, &pwc, 0, &ps); if (n == (size_t) -1) /* Something went wrong. */ return 0; s = alloca (n + 1); assert (mbsinit (&ps)); - (void) wcsrtombs (s, wcs, n + 1, &ps); + pwc = wcs; + (void) wcsrtombs (s, &pwc, n + 1, &ps); - return __wctype (s); + return wctype (s); } # endif # define IS_CHAR_CLASS(string) is_char_class (string) diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c index 037a26d623..a7fcac7c80 100644 --- a/posix/fnmatch_loop.c +++ b/posix/fnmatch_loop.c @@ -224,7 +224,7 @@ FCT (pattern, string, no_leading_period, flags) /* Invalid character class name. */ return FNM_NOMATCH; - if (__iswctype (__btowc ((UCHAR) *n), wt)) + if (ISWCTYPE (BTOWC ((UCHAR) *n), wt)) goto matched; # else if ((STREQ (str, L("alnum")) && ISALNUM ((UCHAR) *n)) @@ -325,6 +325,7 @@ FCT (pattern, string, no_leading_period, flags) return 0; return FNM_NOMATCH; +} #undef FOLD #undef CHAR @@ -333,4 +334,4 @@ FCT (pattern, string, no_leading_period, flags) #undef STRCHR #undef STRCHRNUL #undef L -} +#undef BTOWC |