From ea6eb383294fbf1def7d05e4785a78e68cbf31ce Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 19 Jan 2000 02:23:18 +0000 Subject: [PATCH] Update. 2000-01-18 Bruno Haible * 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 * inet/Versions: Add new functions added on 2000-01-17. --- ChangeLog | 14 ++++++++++++++ inet/Versions | 4 ++++ posix/fnmatch.c | 37 ++++++++++++++++++++++++++++++++----- posix/fnmatch_loop.c | 5 +++-- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1bae44d..100d2d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2000-01-18 Bruno Haible + + * 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 + + * inet/Versions: Add new functions added on 2000-01-17. + 2000-01-18 Jakub Jelinek * dirent/dirent.h (getdentries): Correct prototype to use __off64_t. diff --git a/inet/Versions b/inet/Versions index df97f61..4ce6bf6 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 2dbebfe..85a50ef 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 037a26d..a7fcac7 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 -- 2.7.4