+2003-07-24 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * include/_mingw.h (__CRT_INLINE): Define.
+ * include/ctype.h: Replace 'extern inline' with __CRT_INLINE,
+ throughout
+ * include/inttypes.h: Likewise.
+ * include/math.h: Likewise.
+ * include/stdio.h: Likewise.
+ * include/stdlib.h: Likewise.
+ * include/string.h: Likewise.
+ * include/wchar.h: Likewise.
+ * include/wctype.h: Likewise.
+
2003-09-22 Roland Schwingel <rolandschwingel@users.sourceforge.net>
* mingwex/dirent.c (_topendir): Allocate enough memory for
# endif
#endif /* __GNUC__ */
+#ifdef __cplusplus
+#define __CRT_INLINE inline
+#else
+#define __CRT_INLINE extern __inline__
+#endif
+
#define __MINGW32_VERSION 3.2
#define __MINGW32_MAJOR_VERSION 3
#define __MINGW32_MINOR_VERSION 2
|| defined (__STRICT_ANSI__ ))
/* use simple lookup if SB locale, else _isctype() */
#define __ISCTYPE(c, mask) (MB_CUR_MAX == 1 ? (_pctype[c] & mask) : _isctype(c, mask))
-extern __inline__ int __cdecl isalnum(int c) {return __ISCTYPE(c, (_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl isalpha(int c) {return __ISCTYPE(c, _ALPHA);}
-extern __inline__ int __cdecl iscntrl(int c) {return __ISCTYPE(c, _CONTROL);}
-extern __inline__ int __cdecl isdigit(int c) {return __ISCTYPE(c, _DIGIT);}
-extern __inline__ int __cdecl isgraph(int c) {return __ISCTYPE(c, (_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl islower(int c) {return __ISCTYPE(c, _LOWER);}
-extern __inline__ int __cdecl isprint(int c) {return __ISCTYPE(c, (_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl ispunct(int c) {return __ISCTYPE(c, _PUNCT);}
-extern __inline__ int __cdecl isspace(int c) {return __ISCTYPE(c, _SPACE);}
-extern __inline__ int __cdecl isupper(int c) {return __ISCTYPE(c, _UPPER);}
-extern __inline__ int __cdecl isxdigit(int c) {return __ISCTYPE(c, _HEX);}
+__CRT_INLINE int __cdecl isalnum(int c) {return __ISCTYPE(c, (_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl isalpha(int c) {return __ISCTYPE(c, _ALPHA);}
+__CRT_INLINE int __cdecl iscntrl(int c) {return __ISCTYPE(c, _CONTROL);}
+__CRT_INLINE int __cdecl isdigit(int c) {return __ISCTYPE(c, _DIGIT);}
+__CRT_INLINE int __cdecl isgraph(int c) {return __ISCTYPE(c, (_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl islower(int c) {return __ISCTYPE(c, _LOWER);}
+__CRT_INLINE int __cdecl isprint(int c) {return __ISCTYPE(c, (_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl ispunct(int c) {return __ISCTYPE(c, _PUNCT);}
+__CRT_INLINE int __cdecl isspace(int c) {return __ISCTYPE(c, _SPACE);}
+__CRT_INLINE int __cdecl isupper(int c) {return __ISCTYPE(c, _UPPER);}
+__CRT_INLINE int __cdecl isxdigit(int c) {return __ISCTYPE(c, _HEX);}
/* these reproduce behaviour of lib underscored versions */
-extern __inline__ int __cdecl _tolower(int c) {return ( c -'A'+'a');}
-extern __inline__ int __cdecl _toupper(int c) {return ( c -'a'+'A');}
+__CRT_INLINE int __cdecl _tolower(int c) {return ( c -'A'+'a');}
+__CRT_INLINE int __cdecl _toupper(int c) {return ( c -'a'+'A');}
/* TODO? Is it worth inlining ANSI tolower, toupper? Probably only
if we only want C-locale. */
#if ! (defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
|| defined(__WCTYPE_INLINES_DEFINED))
#define __WCTYPE_INLINES_DEFINED
-extern __inline__ int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
-extern __inline__ int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
-extern __inline__ int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
-extern __inline__ int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
-extern __inline__ int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
-extern __inline__ int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
-extern __inline__ int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
-extern __inline__ int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
-extern __inline__ int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
-extern __inline__ int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+__CRT_INLINE int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
+__CRT_INLINE int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
+__CRT_INLINE int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
+__CRT_INLINE int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
+__CRT_INLINE int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
+__CRT_INLINE int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
+__CRT_INLINE int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
+__CRT_INLINE int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
+__CRT_INLINE int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
+__CRT_INLINE int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
#ifndef __STRICT_ANSI__
int __cdecl __iscsym (int); /* Valid character in C symbol (after first) */
#if !(defined (__NO_INLINE__) || defined (__NO_CTYPE_INLINES))
-extern __inline__ int __cdecl __isascii(int c) {return ((c & ~0x7F) == 0);}
-extern __inline__ int __cdecl __toascii(int c) {return (c & 0x7F);}
-extern __inline__ int __cdecl __iscsymf(int c) {return (isalpha(c) || (c == '_'));}
-extern __inline__ int __cdecl __iscsym(int c) {return (isalnum(c) || (c == '_'));}
+__CRT_INLINE int __cdecl __isascii(int c) {return ((c & ~0x7F) == 0);}
+__CRT_INLINE int __cdecl __toascii(int c) {return (c & 0x7F);}
+__CRT_INLINE int __cdecl __iscsymf(int c) {return (isalpha(c) || (c == '_'));}
+__CRT_INLINE int __cdecl __iscsym(int c) {return (isalnum(c) || (c == '_'));}
#endif /* __NO_CTYPE_INLINES */
#ifndef _NO_OLDNAMES
#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
-extern __inline__ intmax_t __cdecl imaxabs (intmax_t j)
+__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t j)
{return (j >= 0 ? j : -j);}
imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom);
extern int __cdecl __fpclassifyf (float);
extern int __cdecl __fpclassify (double);
-extern __inline__ int __cdecl __fpclassifyl (long double x){
+__CRT_INLINE int __cdecl __fpclassifyl (long double x){
unsigned short sw;
__asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
/* We don't need to worry about trucation here:
A NaN stays a NaN. */
-extern __inline__ int __cdecl __isnan (double _x)
+__CRT_INLINE int __cdecl __isnan (double _x)
{
unsigned short sw;
__asm__ ("fxam;"
== FP_NAN;
}
-extern __inline__ int __cdecl __isnanf (float _x)
+__CRT_INLINE int __cdecl __isnanf (float _x)
{
unsigned short sw;
__asm__ ("fxam;"
== FP_NAN;
}
-extern __inline__ int __cdecl __isnanl (long double _x)
+__CRT_INLINE int __cdecl __isnanl (long double _x)
{
unsigned short sw;
__asm__ ("fxam;"
#define isnormal(x) (fpclassify(x) == FP_NORMAL)
/* 7.12.3.6 The signbit macro */
-extern __inline__ int __cdecl __signbit (double x) {
+__CRT_INLINE int __cdecl __signbit (double x) {
unsigned short stw;
__asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
return stw & 0x0200;
}
-extern __inline__ int __cdecl __signbitf (float x) {
+__CRT_INLINE int __cdecl __signbitf (float x) {
unsigned short stw;
__asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
return stw & 0x0200;
}
-extern __inline__ int __cdecl __signbitl (long double x) {
+__CRT_INLINE int __cdecl __signbitl (long double x) {
unsigned short stw;
__asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
return stw & 0x0200;
extern long double __cdecl atan2l (long double, long double);
/* 7.12.5 Hyperbolic functions: Double in C89 */
-extern __inline__ float __cdecl sinhf (float x)
+__CRT_INLINE float __cdecl sinhf (float x)
{return (float) sinh (x);}
extern long double __cdecl sinhl (long double);
-extern __inline__ float __cdecl coshf (float x)
+__CRT_INLINE float __cdecl coshf (float x)
{return (float) cosh (x);}
extern long double __cdecl coshl (long double);
-extern __inline__ float __cdecl tanhf (float x)
+__CRT_INLINE float __cdecl tanhf (float x)
{return (float) tanh (x);}
extern long double __cdecl tanhl (long double);
*/
/* 7.12.6.1 Double in C89 */
-extern __inline__ float __cdecl expf (float x)
+__CRT_INLINE float __cdecl expf (float x)
{return (float) exp (x);}
extern long double __cdecl expl (long double);
/* 7.12.6.3 The expm1 functions: TODO */
/* 7.12.6.4 Double in C89 */
-extern __inline__ float __cdecl frexpf (float x, int* expn)
+__CRT_INLINE float __cdecl frexpf (float x, int* expn)
{return (float) frexp (x, expn);}
extern long double __cdecl frexpl (long double, int*);
extern int __cdecl ilogbl (long double);
/* 7.12.6.6 Double in C89 */
-extern __inline__ float __cdecl ldexpf (float x, int expn)
+__CRT_INLINE float __cdecl ldexpf (float x, int expn)
{return (float) ldexp (x, expn);}
extern long double __cdecl ldexpl (long double, int);
extern float __cdecl logbf (float);
extern long double __cdecl logbl (long double);
-extern __inline__ double __cdecl logb (double x)
+__CRT_INLINE double __cdecl logb (double x)
{
double res;
__asm__ ("fxtract\n\t"
return res;
}
-extern __inline__ float __cdecl logbf (float x)
+__CRT_INLINE float __cdecl logbf (float x)
{
float res;
__asm__ ("fxtract\n\t"
return res;
}
-extern __inline__ long double __cdecl logbl (long double x)
+__CRT_INLINE long double __cdecl logbl (long double x)
{
long double res;
__asm__ ("fxtract\n\t"
/* 7.12.7.3 */
extern double __cdecl hypot (double, double); /* in libmoldname.a */
-extern __inline__ float __cdecl hypotf (float x, float y)
+__CRT_INLINE float __cdecl hypotf (float x, float y)
{ return (float) hypot (x, y);}
extern long double __cdecl hypotl (long double, long double);
/* 7.12.7.4 The pow functions. Double in C89 */
-extern __inline__ float __cdecl powf (float x, float y)
+__CRT_INLINE float __cdecl powf (float x, float y)
{return (float) pow (x, y);}
extern long double __cdecl powl (long double, long double);
/* 7.12.9.4 */
/* round, using fpu control word settings */
-extern __inline__ double __cdecl rint (double x)
+__CRT_INLINE double __cdecl rint (double x)
{
double retval;
__asm__ ("frndint;": "=t" (retval) : "0" (x));
return retval;
}
-extern __inline__ float __cdecl rintf (float x)
+__CRT_INLINE float __cdecl rintf (float x)
{
float retval;
__asm__ ("frndint;" : "=t" (retval) : "0" (x) );
return retval;
}
-extern __inline__ long double __cdecl rintl (long double x)
+__CRT_INLINE long double __cdecl rintl (long double x)
{
long double retval;
__asm__ ("frndint;" : "=t" (retval) : "0" (x) );
}
/* 7.12.9.5 */
-extern __inline__ long __cdecl lrint (double x)
+__CRT_INLINE long __cdecl lrint (double x)
{
long retval;
__asm__ __volatile__ \
return retval;
}
-extern __inline__ long __cdecl lrintf (float x)
+__CRT_INLINE long __cdecl lrintf (float x)
{
long retval;
__asm__ __volatile__ \
return retval;
}
-extern __inline__ long __cdecl lrintl (long double x)
+__CRT_INLINE long __cdecl lrintl (long double x)
{
long retval;
__asm__ __volatile__ \
return retval;
}
-extern __inline__ long long __cdecl llrint (double x)
+__CRT_INLINE long long __cdecl llrint (double x)
{
long long retval;
__asm__ __volatile__ \
return retval;
}
-extern __inline__ long long __cdecl llrintf (float x)
+__CRT_INLINE long long __cdecl llrintf (float x)
{
long long retval;
__asm__ __volatile__ \
return retval;
}
-extern __inline__ long long __cdecl llrintl (long double x)
+__CRT_INLINE long long __cdecl llrintl (long double x)
{
long long retval;
__asm__ __volatile__ \
#else
/* helper */
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
__fp_unordered_compare (long double x, long double y){
unsigned short retval;
__asm__ ("fucom %%st(1);"
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
int __cdecl snprintf(char* s, size_t n, const char* format, ...);
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
vsnprintf (char* s, size_t n, const char* format, __VALIST arg)
{ return _vsnprintf ( s, n, format, arg); }
int __cdecl vscanf (const char * __restrict__, __VALIST);
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...);
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
{ return _vsnwprintf ( s, n, format, arg);}
int __cdecl vwscanf (const wchar_t * __restrict__, __VALIST);
_CRTIMP double __cdecl strtod (const char*, char**);
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
-extern __inline__ float __cdecl strtof (const char *nptr, char **endptr)
+__CRT_INLINE float __cdecl strtof (const char *nptr, char **endptr)
{ return (strtod (nptr, endptr));}
long double __cdecl strtold (const char * __restrict__, char ** __restrict__);
#endif /* __NO_ISOCEXT */
/* also declared in wchar.h */
_CRTIMP double __cdecl wcstod (const wchar_t*, wchar_t**);
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
-extern __inline__ float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
+__CRT_INLINE float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
{ return (wcstod(nptr, endptr)); }
long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
#endif /* __NO_ISOCEXT */
/* C99 name for _exit */
void __cdecl _Exit(int) _ATTRIB_NORETURN;
#ifndef __STRICT_ANSI__ /* inline using non-ansi functions */
-extern __inline__ void __cdecl _Exit(int status)
+__CRT_INLINE void __cdecl _Exit(int status)
{ _exit(status); }
#endif
lldiv_t __cdecl lldiv (long long, long long);
-extern __inline__ long long __cdecl llabs(long long _j)
+__CRT_INLINE long long __cdecl llabs(long long _j)
{return (_j >= 0 ? _j : -_j);}
long long __cdecl strtoll (const char* __restrict__, char** __restrict, int);
wchar_t* __cdecl ulltow (unsigned long long, wchar_t *, int);
/* inline using non-ansi functions */
-extern __inline__ long long __cdecl atoll (const char * _c)
+__CRT_INLINE long long __cdecl atoll (const char * _c)
{ return _atoi64 (_c); }
-extern __inline__ char* __cdecl lltoa (long long _n, char * _c, int _i)
+__CRT_INLINE char* __cdecl lltoa (long long _n, char * _c, int _i)
{ return _i64toa (_n, _c, _i); }
-extern __inline__ char* __cdecl ulltoa (unsigned long long _n, char * _c, int _i)
+__CRT_INLINE char* __cdecl ulltoa (unsigned long long _n, char * _c, int _i)
{ return _ui64toa (_n, _c, _i); }
-extern __inline__ long long __cdecl wtoll (const wchar_t * _w)
+__CRT_INLINE long long __cdecl wtoll (const wchar_t * _w)
{ return _wtoi64 (_w); }
-extern __inline__ wchar_t* __cdecl lltow (long long _n, wchar_t * _w, int _i)
+__CRT_INLINE wchar_t* __cdecl lltow (long long _n, wchar_t * _w, int _i)
{ return _i64tow (_n, _w, _i); }
-extern __inline__ wchar_t* __cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i)
+__CRT_INLINE wchar_t* __cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i)
{ return _ui64tow (_n, _w, _i); }
#endif /* (__STRICT_ANSI__) */
_CRTIMP char* __cdecl strdup (const char*);
_CRTIMP int __cdecl strcmpi (const char*, const char*);
_CRTIMP int __cdecl stricmp (const char*, const char*);
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
strcasecmp (const char * __sz1, const char * __sz2)
{return _stricmp (__sz1, __sz2);}
_CRTIMP int __cdecl stricoll (const char*, const char*);
_CRTIMP char* __cdecl strlwr (char*);
_CRTIMP int __cdecl strnicmp (const char*, const char*, size_t);
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
strncasecmp (const char * __sz1, const char * __sz2, size_t __sizeMaxCompare)
{return _strnicmp (__sz1, __sz2, __sizeMaxCompare);}
_CRTIMP char* __cdecl strnset (char*, int, size_t);
#endif /* _UWIN */
/* NOTE: There is no _wcscmpi, but this is for compatibility. */
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2)
{return _wcsicmp (__ws1, __ws2);}
_CRTIMP wchar_t* __cdecl wcsdup (wchar_t*);
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...);
-extern __inline__ int __cdecl
+__CRT_INLINE int __cdecl
vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
{ return _vsnwprintf ( s, n, format, arg);}
int __cdecl vwscanf (const wchar_t * __restrict__, __VALIST);
_CRTIMP unsigned long __cdecl wcstoul (const wchar_t*, wchar_t**, int);
_CRTIMP double __cdecl wcstod (const wchar_t*, wchar_t**);
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
-extern __inline__ float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
+__CRT_INLINE float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
{ return (wcstod(nptr, endptr)); }
long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
#endif /* __NO_ISOCEXT */
int __cdecl wctob(wint_t);
#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
-extern __inline__ int __cdecl fwide(FILE* stream, int mode) {return -1;} /* limited to byte orientation */
-extern __inline__ int __cdecl mbsinit(const mbstate_t* ps) {return 1;}
+__CRT_INLINE int __cdecl fwide(FILE* stream, int mode) {return -1;} /* limited to byte orientation */
+__CRT_INLINE int __cdecl mbsinit(const mbstate_t* ps) {return 1;}
wchar_t* __cdecl wmemset(wchar_t* s, wchar_t c, size_t n);
wchar_t* __cdecl wmemchr(const wchar_t* s, wchar_t c, size_t n);
int wmemcmp(const wchar_t* s1, const wchar_t * s2, size_t n);
#if !(defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
|| defined(__WCTYPE_INLINES_DEFINED))
#define __WCTYPE_INLINES_DEFINED
-extern __inline__ int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
-extern __inline__ int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
-extern __inline__ int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
-extern __inline__ int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
-extern __inline__ int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
-extern __inline__ int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
-extern __inline__ int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
-extern __inline__ int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
-extern __inline__ int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
-extern __inline__ int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+__CRT_INLINE int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
+__CRT_INLINE int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
+__CRT_INLINE int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
+__CRT_INLINE int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
+__CRT_INLINE int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
+__CRT_INLINE int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
+__CRT_INLINE int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
+__CRT_INLINE int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
+__CRT_INLINE int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
+__CRT_INLINE int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
+__CRT_INLINE int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */