From 14e54d7c97e4b202bbd7eef189afa384887551c3 Mon Sep 17 00:00:00 2001
From: Danny Smith <dannysmith@users.sourceforge.net>
Date: Mon, 10 Feb 2003 21:13:34 +0000
Subject: [PATCH] 	* include/_mingw.h (_CRTIMP): Define for __GNUC__ if 
 __declspec(dllimport)  supported. 	(__cdecl): Define if not already
 defined. 	(__stdcall): Likewise. 	* include/dirent.h: Qualify fuctions
 with __cdecl. 	* include/fenv.h: Likewise. 	* include/inttypes.h:
 Likewise. 	* include/assert.h: Qualify fuctions with __cdecl. Qualify 
 CRT dll imports with _CRTIMP. 	* include/conio.h: Likewise. 	*
 include/ctype.h: Likewise. 	* include/direct.h: Likewise. 	*
 include/dos.h: Likewise. 	* include/errno.h: Likewise. 	*
 include/float.h: Likewise. 	* include/io.h: Likewise. 	*
 include/locale.h: Likewise. 	* include/malloc.h: Likewise. 	*
 include/math.h: Likewise. 	* include/mbctype.h: Likewise. 	*
 include/mbstring.h: Likewise. 	* include/process.h: Likewise. 	*
 include/setjmp.h: Likewise. 	* include/signal.h: Likewise. 	*
 include/stdio.h: Likewise. 	* include/stdlib.h: Likewise. 	*
 include/string.h: Likewise. 	* include/time.h: Likewise. 	*
 include/wchar.h: Likewise. 	* include/wctype.h: Likewise. 	*
 include/sys/stat.h: Likewise. 	* include/sys/timeb.h: Likewise. 	*
 include/sys/utime.h: Likewise.

	* include/ctype.h: Guard ctype inlines with __NO_INLINE__.
	* include/wctype.h: Guard wctype inlines with __NO_INLINE__.

	* include/stdio.h (__VALIST): Guard against prior definition.
---
 winsup/mingw/ChangeLog           |  41 +++
 winsup/mingw/include/_mingw.h    |  23 +-
 winsup/mingw/include/assert.h    |   2 +-
 winsup/mingw/include/conio.h     |  29 ++-
 winsup/mingw/include/ctype.h     | 151 +++++------
 winsup/mingw/include/direct.h    |  20 +-
 winsup/mingw/include/dirent.h    |  24 +-
 winsup/mingw/include/dos.h       |   2 +-
 winsup/mingw/include/errno.h     |   2 +-
 winsup/mingw/include/fenv.h      |  22 +-
 winsup/mingw/include/float.h     |  30 +--
 winsup/mingw/include/inttypes.h  |  18 +-
 winsup/mingw/include/io.h        | 148 +++++------
 winsup/mingw/include/locale.h    |   6 +-
 winsup/mingw/include/malloc.h    |  18 +-
 winsup/mingw/include/math.h      | 412 ++++++++++++++++---------------
 winsup/mingw/include/mbctype.h   |  30 +--
 winsup/mingw/include/mbstring.h  | 142 +++++------
 winsup/mingw/include/process.h   |  84 +++----
 winsup/mingw/include/setjmp.h    |   4 +-
 winsup/mingw/include/signal.h    |   4 +-
 winsup/mingw/include/stdio.h     | 218 ++++++++--------
 winsup/mingw/include/stdlib.h    | 229 ++++++++---------
 winsup/mingw/include/string.h    | 180 +++++++-------
 winsup/mingw/include/sys/stat.h  |  20 +-
 winsup/mingw/include/sys/timeb.h |   4 +-
 winsup/mingw/include/sys/utime.h |   8 +-
 winsup/mingw/include/time.h      |  44 ++--
 winsup/mingw/include/wchar.h     | 181 +++++++-------
 winsup/mingw/include/wctype.h    |  69 +++---
 30 files changed, 1116 insertions(+), 1049 deletions(-)

diff --git a/winsup/mingw/ChangeLog b/winsup/mingw/ChangeLog
index b0666e73d..3c767fb89 100644
--- a/winsup/mingw/ChangeLog
+++ b/winsup/mingw/ChangeLog
@@ -1,3 +1,44 @@
+2003-02-10  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	* include/_mingw.h (_CRTIMP): Define for __GNUC__ if
+	__declspec(dllimport)  supported.
+	(__cdecl): Define if not already defined.
+	(__stdcall): Likewise.
+	* include/dirent.h: Qualify fuctions with __cdecl.
+	* include/fenv.h: Likewise.
+	* include/inttypes.h: Likewise.
+	* include/assert.h: Qualify fuctions with __cdecl. Qualify
+	CRT dll imports with _CRTIMP.
+	* include/conio.h: Likewise.
+	* include/ctype.h: Likewise.
+	* include/direct.h: Likewise.
+	* include/dos.h: Likewise.
+	* include/errno.h: Likewise.
+	* include/float.h: Likewise.
+	* include/io.h: Likewise.
+	* include/locale.h: Likewise.
+	* include/malloc.h: Likewise.
+	* include/math.h: Likewise.
+	* include/mbctype.h: Likewise.
+	* include/mbstring.h: Likewise.
+	* include/process.h: Likewise.
+	* include/setjmp.h: Likewise.
+	* include/signal.h: Likewise.
+	* include/stdio.h: Likewise.
+	* include/stdlib.h: Likewise.
+	* include/string.h: Likewise.
+	* include/time.h: Likewise.
+	* include/wchar.h: Likewise.
+	* include/wctype.h: Likewise.
+	* include/sys/stat.h: Likewise.
+	* include/sys/timeb.h: Likewise.
+	* include/sys/utime.h: Likewise.
+
+	* include/ctype.h: Guard ctype inlines with __NO_INLINE__.
+	* include/wctype.h: Guard wctype inlines with __NO_INLINE__.
+
+	* include/stdio.h (__VALIST): Guard against prior definition.
+
 2003-02-08  Earnie Boyd  <earnie@users.sf.net>
 
 	* include/_mingw.h: Change version to 3.0
diff --git a/winsup/mingw/include/_mingw.h b/winsup/mingw/include/_mingw.h
index b1eec3598..439b5beaf 100644
--- a/winsup/mingw/include/_mingw.h
+++ b/winsup/mingw/include/_mingw.h
@@ -29,6 +29,7 @@
    __DECLSPEC_SUPPORTED    Defined if dllimport attribute is supported.
    __MINGW_IMPORT          The attribute definition to specify imported
                            variables/functions. 
+   _CRTIMP                 As above.  For MS compatibility.  
    __MINGW32_VERSION       Runtime version.
    __MINGW32_MAJOR_VERSION Runtime major version.
    __MINGW32_MINOR_VERSION Runtime minor version.
@@ -47,6 +48,9 @@
 # ifndef __MINGW_IMPORT
 #  define __MINGW_IMPORT  __declspec(dllimport)
 # endif
+# ifndef _CRTIMP
+#  define _CRTIMP  __declspec(dllimport)
+# endif
 # define __DECLSPEC_SUPPORTED
 #else /* __GNUC__ */
 # ifdef __declspec
@@ -55,12 +59,24 @@
    /* Note the extern. This is needed to work around GCC's
       limitations in handling dllimport attribute.  */
 #   define __MINGW_IMPORT  extern __attribute__((dllimport))
-#   endif
+#  endif
+#  ifndef _CRTIMP
+#   define _CRTIMP  __attribute__((dllimport))
+#  endif
 #  define __DECLSPEC_SUPPORTED
-# else
+# else /* __declspec */
 #  undef __DECLSPEC_SUPPORTED
 #  undef __MINGW_IMPORT
-# endif 
+#  ifndef _CRTIMP
+#   define _CRTIMP
+#  endif
+# endif /* __declspec */
+# ifndef __cdecl
+#  define __cdecl __attribute__((cdecl))
+# endif
+# ifndef __stdcall
+#  define __stdcall __attribute__((stdcall))
+# endif
 # undef __int64
 # define __int64 long long
 #endif /* __GNUC__ */
@@ -70,4 +86,3 @@
 #define __MINGW32_MINOR_VERSION 0
 
 #endif /* __MINGW_H */
-
diff --git a/winsup/mingw/include/assert.h b/winsup/mingw/include/assert.h
index 07a7d1ffe..893db9113 100644
--- a/winsup/mingw/include/assert.h
+++ b/winsup/mingw/include/assert.h
@@ -49,7 +49,7 @@ extern "C" {
  * CRTDLL nicely supplies a function which does the actual output and
  * call to abort.
  */
-void	_assert (const char*, const char*, int)
+_CRTIMP void __cdecl _assert (const char*, const char*, int)
 #ifdef	__GNUC__
 	__attribute__ ((noreturn))
 #endif
diff --git a/winsup/mingw/include/conio.h b/winsup/mingw/include/conio.h
index 4e8d55ab6..780ccc10d 100644
--- a/winsup/mingw/include/conio.h
+++ b/winsup/mingw/include/conio.h
@@ -39,26 +39,25 @@
 extern "C" {
 #endif
 
+_CRTIMP char* __cdecl	_cgets (char*);
+_CRTIMP int __cdecl	_cprintf (const char*, ...);
+_CRTIMP int __cdecl	_cputs (const char*);
+_CRTIMP int __cdecl	_cscanf (char*, ...);
 
-char*	_cgets (char*);
-int	_cprintf (const char*, ...);
-int	_cputs (const char*);
-int	_cscanf (char*, ...);
-
-int	_getch (void);
-int	_getche (void);
-int	_kbhit (void);
-int	_putch (int);
-int	_ungetch (int);
+_CRTIMP int __cdecl	_getch (void);
+_CRTIMP int __cdecl	_getche (void);
+_CRTIMP int __cdecl	_kbhit (void);
+_CRTIMP int __cdecl	_putch (int);
+_CRTIMP int __cdecl	_ungetch (int);
 
 
 #ifndef	_NO_OLDNAMES
 
-int	getch (void);
-int	getche (void);
-int	kbhit (void);
-int	putch (int);
-int	ungetch (int);
+_CRTIMP int __cdecl	getch (void);
+_CRTIMP int __cdecl	getche (void);
+_CRTIMP int __cdecl	kbhit (void);
+_CRTIMP int __cdecl	putch (int);
+_CRTIMP int __cdecl	ungetch (int);
 
 #endif	/* Not _NO_OLDNAMES */
 
diff --git a/winsup/mingw/include/ctype.h b/winsup/mingw/include/ctype.h
index fcbb31d77..462fc7bc7 100644
--- a/winsup/mingw/include/ctype.h
+++ b/winsup/mingw/include/ctype.h
@@ -59,25 +59,25 @@
 extern "C" {
 #endif
 
-int	isalnum(int);
-int	isalpha(int);
-int	iscntrl(int);
-int	isdigit(int);
-int	isgraph(int);
-int	islower(int);
-int	isprint(int);
-int	ispunct(int);
-int	isspace(int);
-int	isupper(int);
-int	isxdigit(int);
+_CRTIMP int __cdecl isalnum(int);
+_CRTIMP int __cdecl isalpha(int);
+_CRTIMP int __cdecl iscntrl(int);
+_CRTIMP int __cdecl isdigit(int);
+_CRTIMP int __cdecl isgraph(int);
+_CRTIMP int __cdecl islower(int);
+_CRTIMP int __cdecl isprint(int);
+_CRTIMP int __cdecl ispunct(int);
+_CRTIMP int __cdecl isspace(int);
+_CRTIMP int __cdecl isupper(int);
+_CRTIMP int __cdecl isxdigit(int);
 
 #ifndef __STRICT_ANSI__
-int	_isctype (int, int);
+_CRTIMP int __cdecl _isctype (int, int);
 #endif
 
 /* These are the ANSI versions, with correct checking of argument */
-int	tolower(int);
-int	toupper(int);
+_CRTIMP int __cdecl tolower(int);
+_CRTIMP int __cdecl toupper(int);
 
 /*
  * NOTE: The above are not old name type wrappers, but functions exported
@@ -89,8 +89,8 @@ int	toupper(int);
  *  These are the cheap non-std versions: The return values are undefined
  *  if the argument is not ASCII char or is not of appropriate case
  */ 
-int	_tolower(int);
-int	_toupper(int);
+_CRTIMP int __cdecl _tolower(int);
+_CRTIMP int __cdecl _toupper(int);
 #endif
 
 /* Also defined in stdlib.h */
@@ -152,24 +152,25 @@ extern unsigned short** _imp___ctype;
  */
 
 
-#if ! (defined (__NO_CTYPE_INLINES) || defined (__STRICT_ANSI__ ))
+#if ! (defined (__NO_INLINE__)  || defined (__NO_CTYPE_INLINES) \
+      || 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 isalnum(int c) {return __ISCTYPE(c, (_ALPHA|_DIGIT));}
-extern __inline__ int isalpha(int c) {return __ISCTYPE(c, _ALPHA);}
-extern __inline__ int iscntrl(int c) {return __ISCTYPE(c, _CONTROL);}
-extern __inline__ int isdigit(int c) {return __ISCTYPE(c, _DIGIT);}
-extern __inline__ int isgraph(int c) {return __ISCTYPE(c, (_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int islower(int c) {return __ISCTYPE(c, _LOWER);}
-extern __inline__ int isprint(int c) {return __ISCTYPE(c, (_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int ispunct(int c) {return __ISCTYPE(c, _PUNCT);}
-extern __inline__ int isspace(int c) {return __ISCTYPE(c, _SPACE);}
-extern __inline__ int isupper(int c) {return __ISCTYPE(c, _UPPER);}
-extern __inline__ int isxdigit(int c) {return __ISCTYPE(c, _HEX);}
+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);}
 
 /* these reproduce behaviour of lib underscored versions  */
-extern __inline__ int _tolower(int c) {return ( c -'A'+'a');}
-extern __inline__ int _toupper(int c) {return ( c -'a'+'A');}
+extern __inline__ int __cdecl _tolower(int c) {return ( c -'A'+'a');}
+extern __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. */
@@ -187,62 +188,64 @@ typedef wchar_t wctype_t;
 #define _WCTYPE_T_DEFINED
 #endif
 
-int	iswalnum(wint_t);
-int	iswalpha(wint_t);
-int	iswascii(wint_t);
-int	iswcntrl(wint_t);
-int	iswctype(wint_t, wctype_t);
-int	is_wctype(wint_t, wctype_t);	/* Obsolete! */
-int	iswdigit(wint_t);
-int	iswgraph(wint_t);
-int	iswlower(wint_t);
-int	iswprint(wint_t);
-int	iswpunct(wint_t);
-int	iswspace(wint_t);
-int	iswupper(wint_t);
-int	iswxdigit(wint_t);
+_CRTIMP int __cdecl iswalnum(wint_t);
+_CRTIMP int __cdecl iswalpha(wint_t);
+_CRTIMP int __cdecl iswascii(wint_t);
+_CRTIMP int __cdecl iswcntrl(wint_t);
+_CRTIMP int __cdecl iswctype(wint_t, wctype_t);
+_CRTIMP int __cdecl is_wctype(wint_t, wctype_t);	/* Obsolete! */
+_CRTIMP int __cdecl iswdigit(wint_t);
+_CRTIMP int __cdecl iswgraph(wint_t);
+_CRTIMP int __cdecl iswlower(wint_t);
+_CRTIMP int __cdecl iswprint(wint_t);
+_CRTIMP int __cdecl iswpunct(wint_t);
+_CRTIMP int __cdecl iswspace(wint_t);
+_CRTIMP int __cdecl iswupper(wint_t);
+_CRTIMP int __cdecl iswxdigit(wint_t);
 
-wchar_t	towlower(wchar_t);
-wchar_t	towupper(wchar_t);
+_CRTIMP wchar_t __cdecl towlower(wchar_t);
+_CRTIMP wchar_t __cdecl towupper(wchar_t);
 
-int	isleadbyte (int);
+_CRTIMP int __cdecl isleadbyte (int);
 
 /* Also in wctype.h */
-#if ! (defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED))
+#if ! (defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
+       || defined(__WCTYPE_INLINES_DEFINED))
 #define __WCTYPE_INLINES_DEFINED
-extern __inline__ int iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
-extern __inline__ int iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
-extern __inline__ int iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
-extern __inline__ int iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
-extern __inline__ int iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
-extern __inline__ int iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
-extern __inline__ int iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
-extern __inline__ int iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
-extern __inline__ int iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
-extern __inline__ int iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
-extern __inline__ int isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+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);}
 #endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
 
 #ifndef	__STRICT_ANSI__
-int	__isascii (int);
-int	__toascii (int);
-int	__iscsymf (int);	/* Valid first character in C symbol */
-int	__iscsym (int);		/* Valid character in C symbol (after first) */
+int __cdecl __isascii (int);
+int __cdecl __toascii (int);
+int __cdecl __iscsymf (int);		/* Valid first character in C symbol */
+int __cdecl __iscsym (int);		/* Valid character in C symbol (after first) */
 
-#ifndef __NO_CTYPE_INLINES
-extern __inline__ int __isascii(int c) {return ((c & ~0x7F) == 0);} 
-extern __inline__ int __toascii(int c) {return (c & 0x7F);}
-extern __inline__ int __iscsymf(int c) {return (isalpha(c) || (c == '_'));}
-extern __inline__ int __iscsym(int c)  {return  (isalnum(c) || (c == '_'));}
+#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 == '_'));}
 #endif /* __NO_CTYPE_INLINES */
 
 #ifndef	_NO_OLDNAMES
-int	isascii (int);
-int	toascii (int);
-int	iscsymf (int);
-int	iscsym (int);
+/* Not _CRTIMP */ 
+int __cdecl isascii (int);
+int __cdecl toascii (int);
+int __cdecl iscsymf (int);
+int __cdecl iscsym (int);
 #endif	/* Not _NO_OLDNAMES */
 
 #endif	/* Not __STRICT_ANSI__ */
diff --git a/winsup/mingw/include/direct.h b/winsup/mingw/include/direct.h
index cbd8e9fe1..c8fec4cf4 100644
--- a/winsup/mingw/include/direct.h
+++ b/winsup/mingw/include/direct.h
@@ -61,11 +61,11 @@ struct _diskfree_t {
  * You really shouldn't be using these. Use the Win32 API functions instead.
  * However, it does make it easier to port older code.
  */
-int	_getdrive (void);
-unsigned long _getdrives(void);
-int	_chdrive (int);
-char*	_getdcwd (int, char*, int);
-unsigned _getdiskfree (unsigned, struct _diskfree_t *);
+_CRTIMP int __cdecl _getdrive (void);
+_CRTIMP unsigned long __cdecl _getdrives(void);
+_CRTIMP int __cdecl _chdrive (int);
+_CRTIMP char* __cdecl _getdcwd (int, char*, int);
+_CRTIMP unsigned __cdecl _getdiskfree (unsigned, struct _diskfree_t *);
 
 #ifndef	_NO_OLDNAMES
 # define diskfree_t _diskfree_t
@@ -74,11 +74,11 @@ unsigned _getdiskfree (unsigned, struct _diskfree_t *);
 #ifndef _WDIRECT_DEFINED
 /* wide character versions. Also in wchar.h */
 #ifdef __MSVCRT__ 
-int _wchdir(const wchar_t*);
-wchar_t* _wgetcwd(wchar_t*, int);
-wchar_t* _wgetdcwd(int, wchar_t*, int);
-int _wmkdir(const wchar_t*);
-int _wrmdir(const wchar_t*);
+_CRTIMP int __cdecl _wchdir(const wchar_t*);
+_CRTIMP wchar_t* __cdecl _wgetcwd(wchar_t*, int);
+_CRTIMP wchar_t* __cdecl _wgetdcwd(int, wchar_t*, int);
+_CRTIMP int __cdecl _wmkdir(const wchar_t*);
+_CRTIMP int __cdecl _wrmdir(const wchar_t*);
 #endif	/* __MSVCRT__ */
 #define _WDIRECT_DEFINED
 #endif
diff --git a/winsup/mingw/include/dirent.h b/winsup/mingw/include/dirent.h
index 4df6bd997..5a9246a4a 100644
--- a/winsup/mingw/include/dirent.h
+++ b/winsup/mingw/include/dirent.h
@@ -77,12 +77,12 @@ typedef struct
 	char			dd_name[1];
 } DIR;
 
-DIR*		opendir (const char*);
-struct dirent*	readdir (DIR*);
-int		closedir (DIR*);
-void		rewinddir (DIR*);
-long		telldir (DIR*);
-void		seekdir (DIR*, long);
+DIR* __cdecl opendir (const char*);
+struct dirent* __cdecl readdir (DIR*);
+int __cdecl closedir (DIR*);
+void __cdecl rewinddir (DIR*);
+long __cdecl telldir (DIR*);
+void __cdecl seekdir (DIR*, long);
 
 
 /* wide char versions */
@@ -127,12 +127,12 @@ typedef struct
 
 
 
-_WDIR*		_wopendir (const wchar_t*);
-struct _wdirent* _wreaddir (_WDIR*);
-int		_wclosedir (_WDIR*);
-void		_wrewinddir (_WDIR*);
-long		_wtelldir (_WDIR*);
-void		_wseekdir (_WDIR*, long);
+_WDIR* __cdecl _wopendir (const wchar_t*);
+struct _wdirent*  __cdecl _wreaddir (_WDIR*);
+int __cdecl _wclosedir (_WDIR*);
+void __cdecl _wrewinddir (_WDIR*);
+long __cdecl _wtelldir (_WDIR*);
+void __cdecl _wseekdir (_WDIR*, long);
 
 
 #ifdef	__cplusplus
diff --git a/winsup/mingw/include/dos.h b/winsup/mingw/include/dos.h
index 5374a7a52..4f2134e7e 100644
--- a/winsup/mingw/include/dos.h
+++ b/winsup/mingw/include/dos.h
@@ -92,7 +92,7 @@ struct _diskfree_t {
 #define _DISKFREE_T_DEFINED
 #endif  
 
-unsigned _getdiskfree (unsigned, struct _diskfree_t *);
+_CRTIMP unsigned __cdecl _getdiskfree (unsigned, struct _diskfree_t *);
 
 #ifndef	_NO_OLDNAMES
 # define diskfree_t _diskfree_t
diff --git a/winsup/mingw/include/errno.h b/winsup/mingw/include/errno.h
index fdeb8e375..e4669ccec 100644
--- a/winsup/mingw/include/errno.h
+++ b/winsup/mingw/include/errno.h
@@ -104,7 +104,7 @@ extern "C" {
 #undef errno
 extern int errno;
 #else
-int*	_errno(void);
+_CRTIMP int* __cdecl _errno(void);
 #define	errno		(*_errno())
 #endif
 
diff --git a/winsup/mingw/include/fenv.h b/winsup/mingw/include/fenv.h
index e27095ff8..43dfd338a 100644
--- a/winsup/mingw/include/fenv.h
+++ b/winsup/mingw/include/fenv.h
@@ -65,23 +65,23 @@ extern "C" {
 /*TODO: Some of these could be inlined */
 /* 7.6.2 Exception */
 
-extern int feclearexcept (int);
-extern int fegetexceptflag (fexcept_t * flagp, int excepts);
-extern int feraiseexcept (int excepts );
-extern int fesetexceptflag (const fexcept_t *, int);
-extern int fetestexcept (int excepts);
+extern int __cdecl feclearexcept (int);
+extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts);
+extern int __cdecl feraiseexcept (int excepts );
+extern int __cdecl fesetexceptflag (const fexcept_t *, int);
+extern int __cdecl fetestexcept (int excepts);
 
 /* 7.6.3 Rounding */
 
-extern int fegetround (void);
-extern int fesetround (int mode);
+extern int __cdecl fegetround (void);
+extern int __cdecl fesetround (int mode);
 
 /* 7.6.4 Environment */
 
-extern int fegetenv (fenv_t * envp);
-extern int fesetenv (const fenv_t * );
-extern int feupdateenv (const fenv_t *);
-extern int feholdexcept (fenv_t *);
+extern int __cdecl fegetenv (fenv_t * envp);
+extern int __cdecl fesetenv (const fenv_t * );
+extern int __cdecl feupdateenv (const fenv_t *);
+extern int __cdecl feholdexcept (fenv_t *);
 
 #ifdef __cplusplus
 }
diff --git a/winsup/mingw/include/float.h b/winsup/mingw/include/float.h
index afcc280a9..1e3d4aa82 100644
--- a/winsup/mingw/include/float.h
+++ b/winsup/mingw/include/float.h
@@ -115,12 +115,12 @@ extern "C" {
 /* Set the FPU control word as cw = (cw & ~unMask) | (unNew & unMask),
  * i.e. change the bits in unMask to have the values they have in unNew,
  * leaving other bits unchanged. */
-unsigned int	_controlfp (unsigned int unNew, unsigned int unMask);
-unsigned int	_control87 (unsigned int unNew, unsigned int unMask);
+_CRTIMP unsigned int __cdecl _controlfp (unsigned int unNew, unsigned int unMask);
+_CRTIMP unsigned int __cdecl _control87 (unsigned int unNew, unsigned int unMask);
 
 
-unsigned int	_clearfp (void);	/* Clear the FPU status word */
-unsigned int	_statusfp (void);	/* Report the FPU status word */
+_CRTIMP unsigned int __cdecl _clearfp (void);	/* Clear the FPU status word */
+_CRTIMP unsigned int __cdecl _statusfp (void);	/* Report the FPU status word */
 #define		_clear87	_clearfp
 #define		_status87	_statusfp
 
@@ -134,11 +134,11 @@ unsigned int	_statusfp (void);	/* Report the FPU status word */
    per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when
    building your application.	 
 */
-void		_fpreset (void);
-void		fpreset (void);
+void __cdecl _fpreset (void);
+void __cdecl fpreset (void);
 
 /* Global 'variable' for the current floating point error code. */
-int *	__fpecode(void);
+_CRTIMP int * __cdecl __fpecode(void);
 #define	_fpecode	(*(__fpecode()))
 
 /*
@@ -146,15 +146,15 @@ int *	__fpecode(void);
  * but they really belong in math.h.
  */
 
-double	_chgsign	(double);
-double	_copysign	(double, double);
-double	_logb		(double);
-double	_nextafter	(double, double);
-double	_scalb		(double, long);
+_CRTIMP double __cdecl _chgsign	(double);
+_CRTIMP double __cdecl _copysign (double, double);
+_CRTIMP double __cdecl _logb (double);
+_CRTIMP double __cdecl _nextafter (double, double);
+_CRTIMP double __cdecl _scalb (double, long);
 
-int	_finite		(double);
-int	_fpclass	(double);
-int	_isnan		(double);
+_CRTIMP int __cdecl _finite (double);
+_CRTIMP int __cdecl _fpclass (double);
+_CRTIMP int __cdecl _isnan (double);
 
 #ifdef	__cplusplus
 }
diff --git a/winsup/mingw/include/inttypes.h b/winsup/mingw/include/inttypes.h
index 70efb5f59..ead95fb9b 100644
--- a/winsup/mingw/include/inttypes.h
+++ b/winsup/mingw/include/inttypes.h
@@ -254,19 +254,21 @@ typedef struct {
 
 #endif	/* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
 
-extern __inline__ intmax_t	imaxabs (intmax_t j)
+extern __inline__ intmax_t __cdecl imaxabs (intmax_t j)
 	{return	(j >= 0 ? j : -j);}
-imaxdiv_t imaxdiv (intmax_t numer, intmax_t denom);
+imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom);
 
 /* 7.8.2 Conversion functions for greatest-width integer types */
 
-intmax_t   strtoimax (const char* __restrict__ nptr, char** __restrict__ endptr, int base);
-uintmax_t  strtoumax (const char* __restrict__ nptr, char** __restrict__ endptr, int base);
+intmax_t __cdecl strtoimax (const char* __restrict__ nptr,
+                            char** __restrict__ endptr, int base);
+uintmax_t __cdecl strtoumax (const char* __restrict__ nptr,
+			     char** __restrict__ endptr, int base);
 
-intmax_t wcstoimax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr,
-	   int base);
-uintmax_t wcstoumax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr,
-	   int base);
+intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr,
+                            wchar_t** __restrict__ endptr, int base);
+uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr,
+			     wchar_t** __restrict__ endptr, int base);
 
 #ifdef	__cplusplus
 }
diff --git a/winsup/mingw/include/io.h b/winsup/mingw/include/io.h
index 288c3dc16..c2a257b33 100644
--- a/winsup/mingw/include/io.h
+++ b/winsup/mingw/include/io.h
@@ -116,36 +116,36 @@ extern "C" {
  * _findclose calls. _findnext also returns -1 if no match could be found,
  * and 0 if a match was found. Call _findclose when you are finished.
  */
-int	_findfirst (const char*, struct _finddata_t*);
-int	_findnext (int, struct _finddata_t*);
-int	_findclose (int);
+_CRTIMP int __cdecl _findfirst (const char*, struct _finddata_t*);
+_CRTIMP int __cdecl _findnext (int, struct _finddata_t*);
+_CRTIMP int __cdecl _findclose (int);
 
-int	_chdir (const char*);
-char*	_getcwd (char*, int);
-int	_mkdir (const char*);
-char*	_mktemp (char*);
-int	_rmdir (const char*);
-int _chmod (const char*, int);
+_CRTIMP int __cdecl _chdir (const char*);
+_CRTIMP char* __cdecl _getcwd (char*, int);
+_CRTIMP int __cdecl _mkdir (const char*);
+_CRTIMP char* __cdecl _mktemp (char*);
+_CRTIMP int __cdecl _rmdir (const char*);
+_CRTIMP int __cdecl _chmod (const char*, int);
 
 
 #ifdef __MSVCRT__
-__int64  _filelengthi64(int);
-long _findfirsti64(const char*, struct _finddatai64_t*);
-int _findnexti64(long, struct _finddatai64_t*);
-__int64  _lseeki64(int, __int64, int);
-__int64  _telli64(int);
+_CRTIMP __int64 __cdecl _filelengthi64(int);
+_CRTIMP long __cdecl _findfirsti64(const char*, struct _finddatai64_t*);
+_CRTIMP int __cdecl _findnexti64(long, struct _finddatai64_t*);
+_CRTIMP __int64 __cdecl _lseeki64(int, __int64, int);
+_CRTIMP __int64 __cdecl _telli64(int);
 #endif /* __MSVCRT__ */
 
 
 #ifndef _NO_OLDNAMES
 
 #ifndef _UWIN
-int	chdir (const char*);
-char*	getcwd (char*, int);
-int	mkdir (const char*);
-char*	mktemp (char*);
-int	rmdir (const char*);
-int chmod (const char*, int);
+_CRTIMP int __cdecl chdir (const char*);
+_CRTIMP char* __cdecl getcwd (char*, int);
+_CRTIMP int __cdecl mkdir (const char*);
+_CRTIMP char* __cdecl mktemp (char*);
+_CRTIMP int __cdecl rmdir (const char*);
+_CRTIMP int __cdecl chmod (const char*, int);
 #endif /* _UWIN */
 
 #endif /* Not _NO_OLDNAMES */
@@ -176,21 +176,21 @@ int chmod (const char*, int);
 extern "C" {
 #endif
 
-int		_access (const char*, int);
-int		_chsize (int, long);
-int		_close (int);
-int		_commit(int);
+_CRTIMP int __cdecl _access (const char*, int);
+_CRTIMP int __cdecl _chsize (int, long);
+_CRTIMP int __cdecl _close (int);
+_CRTIMP int __cdecl _commit(int);
 
 /* NOTE: The only significant bit in unPermissions appears to be bit 7 (0x80),
  *       the "owner write permission" bit (on FAT). */
-int		_creat (const char*, int);
+_CRTIMP int __cdecl _creat (const char*, int);
 
-int		_dup (int);
-int		_dup2 (int, int);
-long		_filelength (int);
-int		_fileno (FILE*);
-long		_get_osfhandle (int);
-int		_isatty (int);
+_CRTIMP int __cdecl _dup (int);
+_CRTIMP int __cdecl _dup2 (int, int);
+_CRTIMP long __cdecl _filelength (int);
+_CRTIMP int __cdecl _fileno (FILE*);
+_CRTIMP long __cdecl _get_osfhandle (int);
+_CRTIMP int __cdecl _isatty (int);
 
 /* In a very odd turn of events this function is excluded from those
  * files which define _STREAM_COMPAT. This is required in order to
@@ -198,47 +198,47 @@ int		_isatty (int);
  * line 107. Actually I might just be able to change the name of
  * the enum member in streambuf.h... we'll see. TODO */
 #ifndef	_STREAM_COMPAT
-int		_eof (int);
+_CRTIMP int __cdecl _eof (int);
 #endif
 
 /* LK_... locking commands defined in sys/locking.h. */
-int		_locking (int, int, long);
+_CRTIMP int __cdecl _locking (int, int, long);
 
-long		_lseek (int, long, int);
+_CRTIMP long __cdecl _lseek (int, long, int);
 
 /* Optional third argument is unsigned unPermissions. */
-int		_open (const char*, int, ...);
+_CRTIMP int __cdecl _open (const char*, int, ...);
 
-int		_open_osfhandle (long, int);
-int		_pipe (int *, unsigned int, int);
-int		_read (int, void*, unsigned int);
-int		_setmode (int, int);
+_CRTIMP int __cdecl _open_osfhandle (long, int);
+_CRTIMP int __cdecl _pipe (int *, unsigned int, int);
+_CRTIMP int __cdecl _read (int, void*, unsigned int);
+_CRTIMP int __cdecl _setmode (int, int);
 
 /* SH_... flags for nShFlags defined in share.h
  * Optional fourth argument is unsigned unPermissions */
-int		_sopen (const char*, int, int, ...);
+_CRTIMP int __cdecl _sopen (const char*, int, int, ...);
 
-long		_tell (int);
+_CRTIMP long __cdecl _tell (int);
 /* Should umask be in sys/stat.h and/or sys/types.h instead? */
-int		_umask (int);
-int		_unlink (const char*);
-int		_write (int, const void*, unsigned int);
+_CRTIMP int __cdecl _umask (int);
+_CRTIMP int __cdecl _unlink (const char*);
+_CRTIMP int __cdecl _write (int, const void*, unsigned int);
 
 /* Wide character versions. Also declared in wchar.h. */
 /* Not in crtdll.dll */
 #if !defined (_WIO_DEFINED)
 #if defined (__MSVCRT__)
-int 		_waccess(const wchar_t*, int);
-int 		_wchmod(const wchar_t*, int);
-int 		_wcreat(const wchar_t*, int);
-long 		_wfindfirst(const wchar_t*, struct _wfinddata_t*);
-int 		_wfindnext(long, struct _wfinddata_t *);
-int 		_wunlink(const wchar_t*);
-int 		_wopen(const wchar_t*, int, ...);
-int 		_wsopen(const wchar_t*, int, int, ...);
-wchar_t * 	_wmktemp(wchar_t*);
-long  _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
-int  _wfindnexti64(long, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl _waccess(const wchar_t*, int);
+_CRTIMP int __cdecl _wchmod(const wchar_t*, int);
+_CRTIMP int __cdecl _wcreat(const wchar_t*, int);
+_CRTIMP long __cdecl _wfindfirst(const wchar_t*, struct _wfinddata_t*);
+_CRTIMP int __cdecl _wfindnext(long, struct _wfinddata_t *);
+_CRTIMP int __cdecl _wunlink(const wchar_t*);
+_CRTIMP int __cdecl _wopen(const wchar_t*, int, ...);
+_CRTIMP int __cdecl _wsopen(const wchar_t*, int, int, ...);
+_CRTIMP wchar_t * __cdecl _wmktemp(wchar_t*);
+_CRTIMP long __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl _wfindnexti64(long, struct _wfinddatai64_t*);
 #endif /* defined (__MSVCRT__) */
 #define _WIO_DEFINED
 #endif /* _WIO_DEFINED */
@@ -250,25 +250,25 @@ int  _wfindnexti64(long, struct _wfinddatai64_t*);
  */
 
 #ifndef _UWIN
-int		access (const char*, int);
-int		chsize (int, long );
-int		close (int);
-int		creat (const char*, int);
-int		dup (int);
-int		dup2 (int, int);
-int		eof (int);
-long		filelength (int);
-int		fileno (FILE*);
-int		isatty (int);
-long		lseek (int, long, int);
-int		open (const char*, int, ...);
-int		read (int, void*, unsigned int);
-int		setmode (int, int);
-int		sopen (const char*, int, int, ...);
-long		tell (int);
-int		umask (int);
-int		unlink (const char*);
-int		write (int, const void*, unsigned int);
+_CRTIMP int __cdecl access (const char*, int);
+_CRTIMP int __cdecl chsize (int, long );
+_CRTIMP int __cdecl close (int);
+_CRTIMP int __cdecl creat (const char*, int);
+_CRTIMP int __cdecl dup (int);
+_CRTIMP int __cdecl dup2 (int, int);
+_CRTIMP int __cdecl eof (int);
+_CRTIMP long __cdecl filelength (int);
+_CRTIMP int __cdecl fileno (FILE*);
+_CRTIMP int __cdecl isatty (int);
+_CRTIMP long __cdecl lseek (int, long, int);
+_CRTIMP int __cdecl open (const char*, int, ...);
+_CRTIMP int __cdecl read (int, void*, unsigned int);
+_CRTIMP int __cdecl setmode (int, int);
+_CRTIMP int __cdecl sopen (const char*, int, int, ...);
+_CRTIMP long __cdecl tell (int);
+_CRTIMP int __cdecl umask (int);
+_CRTIMP int __cdecl unlink (const char*);
+_CRTIMP int __cdecl write (int, const void*, unsigned int);
 #endif /* _UWIN */
 
 /* Wide character versions. Also declared in wchar.h. */
diff --git a/winsup/mingw/include/locale.h b/winsup/mingw/include/locale.h
index 16fb6119a..3f36388bd 100644
--- a/winsup/mingw/include/locale.h
+++ b/winsup/mingw/include/locale.h
@@ -84,13 +84,13 @@ struct lconv
 extern "C" {
 #endif
 
-char*		setlocale (int, const char*);
-struct lconv*	localeconv (void);
+_CRTIMP  char* __cdecl setlocale (int, const char*);
+_CRTIMP struct lconv* __cdecl localeconv (void);
 
 #ifndef _WLOCALE_DEFINED  /* also declared in wchar.h */
 # define __need_wchar_t
 # include <stddef.h>
-  wchar_t* 	_wsetlocale(int, const wchar_t*);
+  _CRTIMP wchar_t* __cdecl _wsetlocale(int, const wchar_t*);
 # define _WLOCALE_DEFINED
 #endif /* ndef _WLOCALE_DEFINED */
 
diff --git a/winsup/mingw/include/malloc.h b/winsup/mingw/include/malloc.h
index 097a5e1c1..834e0212f 100644
--- a/winsup/mingw/include/malloc.h
+++ b/winsup/mingw/include/malloc.h
@@ -60,26 +60,26 @@ extern "C" {
    The _heap* memory allocation functions are supported on NT
    but not W9x. On latter, they always set errno to ENOSYS.
 */
-int	_heapwalk (_HEAPINFO*);
+_CRTIMP int __cdecl _heapwalk (_HEAPINFO*);
 #ifdef __GNUC__
 #define _alloca(x) __builtin_alloca((x))
 #endif
 
 #ifndef	_NO_OLDNAMES
-int	heapwalk (_HEAPINFO*);
+_CRTIMP int __cdecl heapwalk (_HEAPINFO*);
 #ifdef __GNUC__
 #define alloca(x) __builtin_alloca((x))
 #endif
 #endif	/* Not _NO_OLDNAMES */
 
-int	_heapchk (void);	/* Verify heap integrety. */
-int	_heapmin (void);	/* Return unused heap to the OS. */
-int	_heapset (unsigned int);
+_CRTIMP int __cdecl _heapchk (void);	/* Verify heap integrety. */
+_CRTIMP int __cdecl _heapmin (void);	/* Return unused heap to the OS. */
+_CRTIMP int __cdecl _heapset (unsigned int);
 
-size_t	_msize (void*);
-size_t	_get_sbh_threshold (void); 
-int	_set_sbh_threshold (size_t);
-void *	_expand (void*, size_t); 
+_CRTIMP size_t __cdecl _msize (void*);
+_CRTIMP size_t __cdecl _get_sbh_threshold (void); 
+_CRTIMP int __cdecl _set_sbh_threshold (size_t);
+_CRTIMP void* __cdecl _expand (void*, size_t); 
 
 #ifdef __cplusplus
 }
diff --git a/winsup/mingw/include/math.h b/winsup/mingw/include/math.h
index 6249d020c..cad49b186 100644
--- a/winsup/mingw/include/math.h
+++ b/winsup/mingw/include/math.h
@@ -146,37 +146,39 @@ struct _exception
 };
 
 
-double	sin (double);
-double	cos (double);
-double	tan (double);
-double	sinh (double);
-double	cosh (double);
-double	tanh (double);
-double	asin (double);
-double	acos (double);
-double	atan (double);
-double	atan2 (double, double);
-double	exp (double);
-double	log (double);
-double	log10 (double);
-double	pow (double, double);
-double	sqrt (double);
-double	ceil (double);
-double	floor (double);
-double	fabs (double);
-extern __inline__  double fabs (double x)
+_CRTIMP double __cdecl sin (double);
+_CRTIMP double __cdecl cos (double);
+_CRTIMP double __cdecl tan (double);
+_CRTIMP double __cdecl sinh (double);
+_CRTIMP double __cdecl cosh (double);
+_CRTIMP double __cdecl tanh (double);
+_CRTIMP double __cdecl asin (double);
+_CRTIMP double __cdecl acos (double);
+_CRTIMP double __cdecl atan (double);
+_CRTIMP double __cdecl atan2 (double, double);
+_CRTIMP double __cdecl exp (double);
+_CRTIMP double __cdecl log (double);
+_CRTIMP double __cdecl log10 (double);
+_CRTIMP double __cdecl pow (double, double);
+_CRTIMP double __cdecl sqrt (double);
+_CRTIMP double __cdecl ceil (double);
+_CRTIMP double __cdecl floor (double);
+_CRTIMP double __cdecl fabs (double);
+#if !defined (__NO_INLINES__)
+extern __inline__ __cdecl double fabs (double x)
 {
   double res;
   __asm__ ("fabs;" : "=t" (res) : "0" (x));
   return res;
 }
-double	ldexp (double, int);
-double	frexp (double, int*);
-double	modf (double, double*);
-double	fmod (double, double);
+#endif
+_CRTIMP double __cdecl ldexp (double, int);
+_CRTIMP double __cdecl frexp (double, int*);
+_CRTIMP double __cdecl modf (double, double*);
+_CRTIMP double __cdecl fmod (double, double);
 
 
-#ifndef	__STRICT_ANSI__
+#ifndef __STRICT_ANSI__
 
 /* Complex number (for cabs). This really belongs in complex.h */
 struct _complex
@@ -185,16 +187,16 @@ struct _complex
 	double	y;	/* Imaginary part */
 };
 
-double	_cabs (struct _complex);
+_CRTIMP double __cdecl _cabs (struct _complex);
 
-double	_hypot (double, double);
-double	_j0 (double);
-double	_j1 (double);
-double	_jn (int, double);
-double	_y0 (double);
-double	_y1 (double);
-double	_yn (int, double);
-int	_matherr (struct _exception *);
+_CRTIMP double __cdecl _hypot (double, double);
+_CRTIMP double __cdecl _j0 (double);
+_CRTIMP double __cdecl _j1 (double);
+_CRTIMP double __cdecl _jn (int, double);
+_CRTIMP double __cdecl _y0 (double);
+_CRTIMP double __cdecl _y1 (double);
+_CRTIMP double __cdecl _yn (int, double);
+_CRTIMP int __cdecl _matherr (struct _exception *);
 
 /* These are also declared in Mingw float.h; needed here as well to work 
    around GCC build issues.  */
@@ -203,15 +205,15 @@ int	_matherr (struct _exception *);
  * IEEE recommended functions
  */
 
-double	_chgsign	(double);
-double	_copysign	(double, double);
-double	_logb		(double);
-double	_nextafter	(double, double);
-double	_scalb		(double, long);
+_CRTIMP double __cdecl _chgsign (double);
+_CRTIMP double __cdecl _copysign (double, double);
+_CRTIMP double __cdecl _logb (double);
+_CRTIMP double __cdecl _nextafter (double, double);
+_CRTIMP double __cdecl _scalb (double, long);
 
-int	_finite		(double);
-int	_fpclass	(double);
-int	_isnan		(double);
+_CRTIMP int __cdecl _finite (double);
+_CRTIMP int __cdecl _fpclass (double);
+_CRTIMP int __cdecl _isnan (double);
 
 /* END FLOAT.H COPY */
 
@@ -223,27 +225,27 @@ int	_isnan		(double);
 
 #if !defined (_NO_OLDNAMES)
 
-double cabs (struct _complex);
-double j0 (double);
-double j1 (double);
-double jn (int, double);
-double y0 (double);
-double y1 (double);
-double yn (int, double);
+_CRTIMP double __cdecl cabs (struct _complex);
+_CRTIMP double __cdecl j0 (double);
+_CRTIMP double __cdecl j1 (double);
+_CRTIMP double __cdecl jn (int, double);
+_CRTIMP double __cdecl y0 (double);
+_CRTIMP double __cdecl y1 (double);
+_CRTIMP double __cdecl yn (int, double);
 
-double chgsign	(double);
-double scalb (double, long);
-int finite (double);
-int fpclass (double);
+_CRTIMP double __cdecl chgsign (double);
+_CRTIMP double __cdecl scalb (double, long);
+_CRTIMP int __cdecl finite (double);
+_CRTIMP int __cdecl fpclass (double);
 
-#endif	/* Not _NO_OLDNAMES */
+#endif /* Not _NO_OLDNAMES */
 
 #endif /* __STRICT_ANSI__ */
 
 
 #ifndef __NO_ISOCEXT
 #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
-	|| !defined  __STRICT_ANSI__  || defined __GLIBCPP__
+	|| !defined __STRICT_ANSI__ || defined __GLIBCPP__
 
 #define NAN (0.0F/0.0F)
 #define HUGE_VALF (1.0F/0.0F)
@@ -273,10 +275,10 @@ int fpclass (double);
   converted to double, and zero when converted to float.)
 */
 
-extern int __fpclassifyf (float);
-extern int __fpclassify (double);
+extern int __cdecl __fpclassifyf (float);
+extern int __cdecl __fpclassify (double);
 
-extern __inline__ int __fpclassifyl (long double x){
+extern __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 );
@@ -296,7 +298,7 @@ extern __inline__ int __fpclassifyl (long double x){
 /* We don't need to worry about trucation here:
    A NaN stays a NaN. */
 
-extern __inline__ int __isnan (double _x)
+extern __inline__ int __cdecl __isnan (double _x)
 {
   unsigned short sw;
   __asm__ ("fxam;"
@@ -305,7 +307,7 @@ extern __inline__ int __isnan (double _x)
     == FP_NAN;
 }
 
-extern __inline__ int __isnanf (float _x)
+extern __inline__ int __cdecl __isnanf (float _x)
 {
   unsigned short sw;
   __asm__ ("fxam;"
@@ -314,7 +316,7 @@ extern __inline__ int __isnanf (float _x)
     == FP_NAN;
 }
 
-extern __inline__ int __isnanl (long double _x)
+extern __inline__ int __cdecl __isnanl (long double _x)
 {
   unsigned short sw;
   __asm__ ("fxam;"
@@ -332,120 +334,120 @@ extern __inline__ int __isnanl (long double _x)
 #define isnormal(x) (fpclassify(x) == FP_NORMAL)
 
 /* 7.12.3.6 The signbit macro */
-extern __inline__ int __signbit (double x) {
+extern __inline__ int __cdecl __signbit (double x) {
   unsigned short stw;
   __asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
   return stw & 0x0200;
 }
 
-extern  __inline__ int __signbitf (float x) {
-  unsigned short stw;
-  __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
-  return stw & 0x0200;
-}
-extern  __inline__ int __signbitl (long double x) {
+extern  __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) {
+  unsigned short stw;
+  __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+  return stw & 0x0200;
+}
 
 #define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x)	\
 		    : sizeof (x) == sizeof (double) ? __signbit (x)	\
 		    : __signbitl (x))
 
 /* 7.12.4 Trigonometric functions: Double in C89 */
-extern float sinf (float);
-extern long double sinl (long double);
+extern float __cdecl sinf (float);
+extern long double __cdecl sinl (long double);
 
-extern float cosf (float);
-extern long double cosl (long double);
+extern float __cdecl cosf (float);
+extern long double __cdecl cosl (long double);
 
-extern float tanf (float);
-extern long double tanl (long double);
+extern float __cdecl tanf (float);
+extern long double __cdecl tanl (long double);
 
-extern float asinf (float);
-extern long double asinl (long double);
+extern float __cdecl asinf (float);
+extern long double __cdecl asinl (long double);
 
-extern float acosf (float);
-extern long double acosl (long double);
+extern float __cdecl acosf (float);
+extern long double __cdecl acosl (long double);
 
-extern float atanf (float);
-extern long double atanl (long double);
+extern float __cdecl atanf (float);
+extern long double __cdecl atanl (long double);
 
-extern float atan2f (float, float);
-extern long double atan2l (long double, long double);
+extern float __cdecl atan2f (float, float);
+extern long double __cdecl atan2l (long double, long double);
 
 /* 7.12.5 Hyperbolic functions: Double in C89  */
-extern __inline__ float sinhf (float x)
+extern __inline__ float __cdecl sinhf (float x)
   {return (float) sinh (x);}
-extern long double sinhl (long double);
+extern long double __cdecl sinhl (long double);
 
-extern __inline__ float coshf (float x)
+extern __inline__ float __cdecl coshf (float x)
   {return (float) cosh (x);}
-extern long double coshl (long double);
+extern long double __cdecl coshl (long double);
 
-extern __inline__ float tanhf (float x)
+extern __inline__ float __cdecl tanhf (float x)
   {return (float) tanh (x);}
-extern long double tanhl (long double);
+extern long double __cdecl tanhl (long double);
 
 /*
  * TODO: asinh, acosh, atanh
  */ 
 
 /* 7.12.6.1 Double in C89 */
-extern __inline__ float expf (float x)
+extern __inline__ float __cdecl expf (float x)
   {return (float) exp (x);}
-extern long double expl (long double);
+extern long double __cdecl expl (long double);
 
 /* 7.12.6.2 */
-extern double exp2(double);
-extern float exp2f(float);
-extern long double exp2l(long double);
+extern double __cdecl exp2(double);
+extern float __cdecl exp2f(float);
+extern long double __cdecl exp2l(long double);
 
 /* 7.12.6.3 The expm1 functions: TODO */
 
 /* 7.12.6.4 Double in C89 */
-extern __inline__ float frexpf (float x, int* expn)
+extern __inline__ float __cdecl frexpf (float x, int* expn)
   {return (float) frexp (x, expn);}
-extern long double frexpl (long double, int*);
+extern long double __cdecl frexpl (long double, int*);
 
 /* 7.12.6.5 */
 #define FP_ILOGB0 ((int)0x80000000)
 #define FP_ILOGBNAN ((int)0x80000000)
-extern int ilogb (double);
-extern int ilogbf (float);
-extern int ilogbl (long double);
+extern int __cdecl ilogb (double);
+extern int __cdecl ilogbf (float);
+extern int __cdecl ilogbl (long double);
 
 /* 7.12.6.6  Double in C89 */
-extern __inline__ float ldexpf (float x, int expn)
+extern __inline__ float __cdecl ldexpf (float x, int expn)
   {return (float) ldexp (x, expn);}
-extern long double ldexpl (long double, int);
+extern long double __cdecl ldexpl (long double, int);
 
 /* 7.12.6.7 Double in C89 */
-extern float logf (float);
-extern long double logl (long double);
+extern float __cdecl logf (float);
+extern long double __cdecl logl (long double);
 
 /* 7.12.6.8 Double in C89 */
-extern float log10f (float);
-extern long double log10l (long double);
+extern float __cdecl log10f (float);
+extern long double __cdecl log10l (long double);
 
 /* 7.12.6.9 */
-extern double log1p(double);
-extern float log1pf(float);
-extern long double log1pl(long double);
+extern double __cdecl log1p(double);
+extern float __cdecl log1pf(float);
+extern long double __cdecl log1pl(long double);
 
 /* 7.12.6.10 */
-extern double log2 (double);
-extern float log2f (float);
-extern long double log2l (long double);
+extern double __cdecl log2 (double);
+extern float __cdecl log2f (float);
+extern long double __cdecl log2l (long double);
 
 /* 7.12.6.11 */
-extern double logb (double);
-extern float logbf (float);
-extern long double logbl (long double);
+extern double __cdecl logb (double);
+extern float __cdecl logbf (float);
+extern long double __cdecl logbl (long double);
 
-extern __inline__ double logb (double x)
+extern __inline__ double __cdecl logb (double x)
 {
   double res;
   __asm__ ("fxtract\n\t"
@@ -453,7 +455,7 @@ extern __inline__ double logb (double x)
   return res;
 }
 
-extern __inline__ float logbf (float x)
+extern __inline__ float __cdecl logbf (float x)
 {
   float res;
   __asm__ ("fxtract\n\t"
@@ -461,7 +463,7 @@ extern __inline__ float logbf (float x)
   return res;
 }
 
-extern __inline__ long double logbl (long double x)
+extern __inline__ long double __cdecl logbl (long double x)
 {
   long double res;
   __asm__ ("fxtract\n\t"
@@ -470,33 +472,33 @@ extern __inline__ long double logbl (long double x)
 }
 
 /* 7.12.6.12  Double in C89 */
-extern float modff (float, float*);
-extern long double modfl (long double, long double*);
+extern float __cdecl modff (float, float*);
+extern long double __cdecl modfl (long double, long double*);
 
 /* 7.12.6.13 */
-extern double scalbn (double, int);
-extern float scalbnf (float, int);
-extern long double scalbnl (long double, int);
+extern double __cdecl scalbn (double, int);
+extern float __cdecl scalbnf (float, int);
+extern long double __cdecl scalbnl (long double, int);
 
-extern double scalbln (double, long);
-extern float scalblnf (float, long);
-extern long double scalblnl (long double, long);
+extern double __cdecl scalbln (double, long);
+extern float __cdecl scalblnf (float, long);
+extern long double __cdecl scalblnl (long double, long);
 
 /* 7.12.7.1 */
 /* Implementations adapted from Cephes versions */ 
-extern double cbrt (double);
-extern float cbrtf (float);
-extern long double cbrtl (long double);
+extern double __cdecl cbrt (double);
+extern float __cdecl cbrtf (float);
+extern long double __cdecl cbrtl (long double);
 
 /* 7.12.7.2 The fabs functions: Double in C89 */
-extern __inline__ float fabsf (float x)
+extern __inline__ float __cdecl fabsf (float x)
 {
   float res;
   __asm__ ("fabs;" : "=t" (res) : "0" (x));
   return res;
 }
 
-extern __inline__ long double fabsl (long double x)
+extern __inline__ long double __cdecl fabsl (long double x)
 {
   long double res;
   __asm__ ("fabs;" : "=t" (res) : "0" (x));
@@ -504,74 +506,74 @@ extern __inline__ long double fabsl (long double x)
 }
 
 /* 7.12.7.3  */
-extern double hypot (double, double); /* in libmoldname.a */
-extern __inline__ float hypotf (float x, float y)
+extern double __cdecl hypot (double, double); /* in libmoldname.a */
+extern __inline__ float __cdecl hypotf (float x, float y)
   { return (float) hypot (x, y);}
-extern long double hypotl (long double, long double);
+extern long double __cdecl hypotl (long double, long double);
 
 /* 7.12.7.4 The pow functions. Double in C89 */
-extern __inline__ float powf (float x, float y)
+extern __inline__ float __cdecl powf (float x, float y)
   {return (float) pow (x, y);}
-extern long double powl (long double, long double);
+extern long double __cdecl powl (long double, long double);
 
 /* 7.12.7.5 The sqrt functions. Double in C89. */
-extern float sqrtf (float);
-extern long double sqrtl (long double);
+extern float __cdecl sqrtf (float);
+extern long double __cdecl sqrtl (long double);
 
 /* 7.12.8.1 The erf functions  */
-extern double erf (double);
-extern float erff (float);
+extern double __cdecl erf (double);
+extern float __cdecl erff (float);
 /* TODO
-extern long double erfl (long double);
+extern long double __cdecl erfl (long double);
 */ 
 
 /* 7.12.8.2 The erfc functions  */
-extern double erfc (double);
-extern float erfcf (float);
+extern double __cdecl erfc (double);
+extern float __cdecl erfcf (float);
 /* TODO
-extern long double erfcl (long double);
+extern long double __cdecl erfcl (long double);
 */ 
 
 /* 7.12.8.3 The lgamma functions */
-extern double lgamma (double);
-extern float lgammaf (float);
-extern long double lgammal (long double);
+extern double __cdecl lgamma (double);
+extern float __cdecl lgammaf (float);
+extern long double __cdecl lgammal (long double);
 
 /* 7.12.8.4 The tgamma functions */
-extern double tgamma (double);
-extern float tgammaf (float);
-extern long double tgammal (long double);
+extern double __cdecl tgamma (double);
+extern float __cdecl tgammaf (float);
+extern long double __cdecl tgammal (long double);
 
 /* 7.12.9.1 Double in C89 */
-extern float ceilf (float);
-extern long double ceill (long double);
+extern float __cdecl ceilf (float);
+extern long double __cdecl ceill (long double);
 
 /* 7.12.9.2 Double in C89 */
-extern float floorf (float);
-extern long double floorl (long double);
+extern float __cdecl floorf (float);
+extern long double __cdecl floorl (long double);
 
 /* 7.12.9.3 */
-extern double nearbyint ( double);
-extern float nearbyintf (float);
-extern long double nearbyintl (long double);
+extern double __cdecl nearbyint ( double);
+extern float __cdecl nearbyintf (float);
+extern long double __cdecl nearbyintl (long double);
 
 /* 7.12.9.4 */
 /* round, using fpu control word settings */
-extern __inline__ double rint (double x)
+extern __inline__ double __cdecl rint (double x)
 {
   double retval;
   __asm__ ("frndint;": "=t" (retval) : "0" (x));
   return retval;
 }
 
-extern __inline__ float rintf (float x)
+extern __inline__ float __cdecl rintf (float x)
 {
   float retval;
   __asm__ ("frndint;" : "=t" (retval) : "0" (x) );
   return retval;
 }
 
-extern __inline__ long double rintl (long double x)
+extern __inline__ long double __cdecl rintl (long double x)
 {
   long double retval;
   __asm__ ("frndint;" : "=t" (retval) : "0" (x) );
@@ -579,7 +581,7 @@ extern __inline__ long double rintl (long double x)
 }
 
 /* 7.12.9.5 */
-extern __inline__ long lrint (double x) 
+extern __inline__ long __cdecl lrint (double x) 
 {
   long retval;  
   __asm__ __volatile__							      \
@@ -587,7 +589,7 @@ extern __inline__ long lrint (double x)
   return retval;
 }
 
-extern __inline__ long lrintf (float x) 
+extern __inline__ long __cdecl lrintf (float x) 
 {
   long retval;
   __asm__ __volatile__							      \
@@ -595,7 +597,7 @@ extern __inline__ long lrintf (float x)
   return retval;
 }
 
-extern __inline__ long lrintl (long double x) 
+extern __inline__ long __cdecl lrintl (long double x) 
 {
   long retval;
   __asm__ __volatile__							      \
@@ -603,7 +605,7 @@ extern __inline__ long lrintl (long double x)
   return retval;
 }
 
-extern __inline__ long long llrint (double x) 
+extern __inline__ long long __cdecl llrint (double x) 
 {
   long long retval;
   __asm__ __volatile__							      \
@@ -611,7 +613,7 @@ extern __inline__ long long llrint (double x)
   return retval;
 }
 
-extern __inline__ long long llrintf (float x) 
+extern __inline__ long long __cdecl llrintf (float x) 
 {
   long long retval;
   __asm__ __volatile__							      \
@@ -619,7 +621,7 @@ extern __inline__ long long llrintf (float x)
   return retval;
 }
 
-extern __inline__ long long llrintl (long double x) 
+extern __inline__ long long __cdecl llrintl (long double x) 
 {
   long long retval;
   __asm__ __volatile__							      \
@@ -629,48 +631,48 @@ extern __inline__ long long llrintl (long double x)
 
 /* 7.12.9.6 */
 /* round away from zero, regardless of fpu control word settings */
-extern double round (double);
-extern float roundf (float);
-extern long double roundl (long double);
+extern double __cdecl round (double);
+extern float __cdecl roundf (float);
+extern long double __cdecl roundl (long double);
 
 /* 7.12.9.7  */
-extern long lround (double);
-extern long lroundf (float);
-extern long lroundl (long double);
+extern long __cdecl lround (double);
+extern long __cdecl lroundf (float);
+extern long __cdecl lroundl (long double);
 
-extern long long llround (double);
-extern long long llroundf (float);
-extern long long llroundl (long double);
+extern long long __cdecl llround (double);
+extern long long __cdecl llroundf (float);
+extern long long __cdecl llroundl (long double);
 
 /* 7.12.9.8 */
 /* round towards zero, regardless of fpu control word settings */
-extern double trunc (double);
-extern float truncf (float);
-extern long double truncl (long double);
+extern double __cdecl trunc (double);
+extern float __cdecl truncf (float);
+extern long double __cdecl truncl (long double);
 
 /* 7.12.10.1 Double in C89 */
-extern float fmodf (float, float);
-extern long double fmodl (long double, long double);
+extern float __cdecl fmodf (float, float);
+extern long double __cdecl fmodl (long double, long double);
 
 /* 7.12.10.2 */ 
-extern double remainder (double, double);
-extern float remainderf (float, float);
-extern long double remainderl (long double, long double);
+extern double __cdecl remainder (double, double);
+extern float __cdecl remainderf (float, float);
+extern long double __cdecl remainderl (long double, long double);
 
 /* 7.12.10.3 */
-extern double remquo(double, double, int *);
-extern float remquof(float, float, int *);
-extern long double remquol(long double, long double, int *);
+extern double __cdecl remquo(double, double, int *);
+extern float __cdecl remquof(float, float, int *);
+extern long double __cdecl remquol(long double, long double, int *);
 
 /* 7.12.11.1 */
-extern double copysign (double, double); /* in libmoldname.a */
-extern float copysignf (float, float);
-extern long double copysignl (long double, long double);
+extern double __cdecl copysign (double, double); /* in libmoldname.a */
+extern float __cdecl copysignf (float, float);
+extern long double __cdecl copysignl (long double, long double);
 
 /* 7.12.11.2 Return a NaN */
-extern double nan(const char *tagp);
-extern float nanf(const char *tagp);
-extern long double nanl(const char *tagp);
+extern double __cdecl nan(const char *tagp);
+extern float __cdecl nanf(const char *tagp);
+extern long double __cdecl nanl(const char *tagp);
 
 #ifndef __STRICT_ANSI__
 #define _nan() nan("")
@@ -679,18 +681,18 @@ extern long double nanl(const char *tagp);
 #endif
 
 /* 7.12.11.3 */
-extern double nextafter (double, double); /* in libmoldname.a */
-extern float nextafterf (float, float);
+extern double __cdecl nextafter (double, double); /* in libmoldname.a */
+extern float __cdecl nextafterf (float, float);
 /* TODO: Not yet implemented */
-/* extern long double nextafterl (long double, long double); */
+/* extern long double __cdecl nextafterl (long double, long double); */
 
 /* 7.12.11.4 The nexttoward functions: TODO */
 
 /* 7.12.12.1 */
 /*  x > y ? (x - y) : 0.0  */
-extern double fdim (double x, double y);
-extern float fdimf (float x, float y);
-extern long double fdiml (long double x, long double y);
+extern double __cdecl fdim (double x, double y);
+extern float __cdecl fdimf (float x, float y);
+extern long double __cdecl fdiml (long double x, long double y);
 
 /* fmax and fmin.
    NaN arguments are treated as missing data: if one argument is a NaN
@@ -698,20 +700,20 @@ extern long double fdiml (long double x, long double y);
    value. */
 
 /* 7.12.12.2 */
-extern double fmax  (double, double);
-extern float fmaxf (float, float);
-extern long double fmaxl (long double, long double);
+extern double __cdecl fmax  (double, double);
+extern float __cdecl fmaxf (float, float);
+extern long double __cdecl fmaxl (long double, long double);
 
 /* 7.12.12.3 */
-extern double fmin (double, double);
-extern float fminf (float, float);
-extern long double fminl (long double, long double);
+extern double __cdecl fmin (double, double);
+extern float __cdecl fminf (float, float);
+extern long double __cdecl fminl (long double, long double);
 
 /* 7.12.13.1 */
 /* return x * y + z as a ternary op */ 
-extern double fma (double, double, double);
-extern float fmaf (float, float, float);
-extern long double fmal (long double, long double, long double);
+extern double __cdecl fma (double, double, double);
+extern float __cdecl fmaf (float, float, float);
+extern long double __cdecl fmal (long double, long double, long double);
 
 
 /* 7.12.14 */
@@ -734,7 +736,7 @@ extern long double fmal (long double, long double, long double);
 
 #else
 /*  helper  */
-extern  __inline__ int
+extern  __inline__ int  __cdecl
 __fp_unordered_compare (long double x, long double y){
   unsigned short retval;
   __asm__ ("fucom %%st(1);"
diff --git a/winsup/mingw/include/mbctype.h b/winsup/mingw/include/mbctype.h
index 346e6d790..dd57a7b5c 100644
--- a/winsup/mingw/include/mbctype.h
+++ b/winsup/mingw/include/mbctype.h
@@ -54,29 +54,29 @@ extern "C" {
 
 #ifndef	__STRICT_ANSI__
 
-int _setmbcp (int);
-int _getmbcp (void);
+_CRTIMP int __cdecl _setmbcp (int);
+_CRTIMP int __cdecl _getmbcp (void);
 
 /* byte classification  */
 /* NB: Corresponding _ismbc* functions are in mbstring.h */
 
-int _ismbbalpha (unsigned int);
-int _ismbbalnum (unsigned int);
-int _ismbbgraph (unsigned int);
-int _ismbbprint (unsigned int);
-int _ismbbpunct (unsigned int);
+_CRTIMP int __cdecl _ismbbalpha (unsigned int);
+_CRTIMP int __cdecl _ismbbalnum (unsigned int);
+_CRTIMP int __cdecl _ismbbgraph (unsigned int);
+_CRTIMP int __cdecl _ismbbprint (unsigned int);
+_CRTIMP int __cdecl _ismbbpunct (unsigned int);
 
-int _ismbbkana (unsigned int);
-int _ismbbkalnum (unsigned int);
-int _ismbbkprint (unsigned int);
-int _ismbbkpunct (unsigned int);
+_CRTIMP int __cdecl _ismbbkana (unsigned int);
+_CRTIMP int __cdecl _ismbbkalnum (unsigned int);
+_CRTIMP int __cdecl _ismbbkprint (unsigned int);
+_CRTIMP int __cdecl _ismbbkpunct (unsigned int);
 
 
 /* these are also in mbstring.h */
-int _ismbblead (unsigned int);
-int _ismbbtrail (unsigned int);
-int _ismbslead (const unsigned char*, const unsigned char*);
-int _ismbstrail (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _ismbblead (unsigned int);
+_CRTIMP int __cdecl _ismbbtrail (unsigned int);
+_CRTIMP int __cdecl _ismbslead (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _ismbstrail (const unsigned char*, const unsigned char*);
 
 #ifdef __DECLSPEC_SUPPORTED
 __MINGW_IMPORT unsigned char _mbctype[];
diff --git a/winsup/mingw/include/mbstring.h b/winsup/mingw/include/mbstring.h
index 6b89ebd76..4ad777602 100644
--- a/winsup/mingw/include/mbstring.h
+++ b/winsup/mingw/include/mbstring.h
@@ -36,89 +36,89 @@ extern "C" {
 #ifndef	__STRICT_ANSI__
 
 /* character classification */
-int _ismbcalnum (unsigned int);
-int _ismbcalpha (unsigned int);
-int _ismbcdigit (unsigned int);
-int _ismbcgraph (unsigned int);
-int _ismbcprint (unsigned int);
-int _ismbcpunct (unsigned int);
-int _ismbcspace (unsigned int);
-int _ismbclower (unsigned int);
-int _ismbcupper (unsigned int);
-int _ismbclegal (unsigned int);
-int _ismbcsymbol (unsigned int);
+_CRTIMP int __cdecl _ismbcalnum (unsigned int);
+_CRTIMP int __cdecl _ismbcalpha (unsigned int);
+_CRTIMP int __cdecl _ismbcdigit (unsigned int);
+_CRTIMP int __cdecl _ismbcgraph (unsigned int);
+_CRTIMP int __cdecl _ismbcprint (unsigned int);
+_CRTIMP int __cdecl _ismbcpunct (unsigned int);
+_CRTIMP int __cdecl _ismbcspace (unsigned int);
+_CRTIMP int __cdecl _ismbclower (unsigned int);
+_CRTIMP int __cdecl _ismbcupper (unsigned int);
+_CRTIMP int __cdecl _ismbclegal (unsigned int);
+_CRTIMP int __cdecl _ismbcsymbol (unsigned int);
 
 
 /* also in mbctype.h */
-int _ismbblead (unsigned int );
-int _ismbbtrail (unsigned int );
-int _ismbslead ( const unsigned char*, const unsigned char*);
-int _ismbstrail ( const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _ismbblead (unsigned int );
+_CRTIMP int __cdecl _ismbbtrail (unsigned int );
+_CRTIMP int __cdecl _ismbslead ( const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _ismbstrail ( const unsigned char*, const unsigned char*);
 
-unsigned int _mbctolower (unsigned int);
-unsigned int _mbctoupper (unsigned int);
+_CRTIMP unsigned int __cdecl _mbctolower (unsigned int);
+_CRTIMP unsigned int __cdecl _mbctoupper (unsigned int);
 
-void _mbccpy (unsigned char*, const unsigned char*);
-size_t _mbclen (const unsigned char*);
+_CRTIMP void __cdecl _mbccpy (unsigned char*, const unsigned char*);
+_CRTIMP size_t __cdecl _mbclen (const unsigned char*);
 
-unsigned int _mbbtombc (unsigned int);
-unsigned int _mbctombb (unsigned int);
+_CRTIMP unsigned int __cdecl _mbbtombc (unsigned int);
+_CRTIMP unsigned int __cdecl _mbctombb (unsigned int);
 
 /* Return value constants for these are defined in mbctype.h.  */
-int _mbbtype (unsigned char, int);
-int _mbsbtype (const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbbtype (unsigned char, int);
+_CRTIMP int __cdecl _mbsbtype (const unsigned char*, size_t);
 
-unsigned char* _mbscpy (unsigned char*, const unsigned char*);
-unsigned char* _mbsncpy (unsigned char*, const unsigned char*, size_t);
-unsigned char* _mbsnbcpy (unsigned char*, const unsigned char*, size_t);
-unsigned char* _mbsset (unsigned char*, unsigned int);
-unsigned char* _mbsnset (unsigned char*, unsigned int, size_t);
-unsigned char* _mbsnbset (unsigned char*, unsigned int, size_t);
-unsigned char* _mbsdup (const unsigned char*);
-unsigned char* _mbsrev (unsigned char*);
-unsigned char* _mbscat (unsigned char*, const unsigned char*);
-unsigned char* _mbsncat (unsigned char*, const unsigned char*, size_t);
-unsigned char* _mbsnbcat (unsigned char*, const unsigned char*, size_t);
-size_t _mbslen (const unsigned char*);
-size_t _mbsnbcnt (const unsigned char*, size_t);
-size_t _mbsnccnt (const unsigned char*, size_t);
-unsigned char* _mbschr (const unsigned char*, unsigned int);
-unsigned char* _mbsrchr (const unsigned char*, unsigned int);
-size_t _mbsspn (const unsigned char*, const unsigned char*);
-size_t _mbscspn (const unsigned char*, const unsigned char*);
-unsigned char* _mbsspnp (const unsigned char*, const unsigned char*);
-unsigned char* _mbspbrk (const unsigned char*, const unsigned char*);
-int _mbscmp (const unsigned char*, const unsigned char*);
-int _mbsicmp (const unsigned char*, const unsigned char*);
-int _mbsncmp (const unsigned char*, const unsigned char*, size_t);
-int _mbsnicmp (const unsigned char*, const unsigned char*, size_t);
-int _mbsnbcmp (const unsigned char*, const unsigned char*, size_t);
-int _mbsnbicmp (const unsigned char*, const unsigned char*, size_t);
-int _mbscoll (const unsigned char*, const unsigned char*);
-int _mbsicoll (const unsigned char*, const unsigned char*);
-int _mbsncoll (const unsigned char*, const unsigned char*, size_t);
-int _mbsnicoll (const unsigned char*, const unsigned char*, size_t);
-int _mbsnbcoll (const unsigned char*, const unsigned char*, size_t);
-int _mbsnbicoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbscpy (unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsncpy (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsnbcpy (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsset (unsigned char*, unsigned int);
+_CRTIMP unsigned char* __cdecl  _mbsnset (unsigned char*, unsigned int, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsnbset (unsigned char*, unsigned int, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsdup (const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsrev (unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbscat (unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsncat (unsigned char*, const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsnbcat (unsigned char*, const unsigned char*, size_t);
+_CRTIMP size_t __cdecl _mbslen (const unsigned char*);
+_CRTIMP size_t __cdecl _mbsnbcnt (const unsigned char*, size_t);
+_CRTIMP size_t __cdecl _mbsnccnt (const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbschr (const unsigned char*, unsigned int);
+_CRTIMP unsigned char* __cdecl  _mbsrchr (const unsigned char*, unsigned int);
+_CRTIMP size_t __cdecl _mbsspn (const unsigned char*, const unsigned char*);
+_CRTIMP size_t __cdecl _mbscspn (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsspnp (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbspbrk (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _mbscmp (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _mbsicmp (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _mbsncmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnicmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnbcmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnbicmp (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbscoll (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _mbsicoll (const unsigned char*, const unsigned char*);
+_CRTIMP int __cdecl _mbsncoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnicoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnbcoll (const unsigned char*, const unsigned char*, size_t);
+_CRTIMP int __cdecl _mbsnbicoll (const unsigned char*, const unsigned char*, size_t);
 
-unsigned char* _mbsinc (const unsigned char*);
-unsigned char* _mbsninc (const unsigned char*, size_t);
-unsigned char* _mbsdec (const unsigned char*, const unsigned char*);
-unsigned int _mbsnextc  (const unsigned char*);
-unsigned char* _mbslwr (unsigned char*);
-unsigned char* _mbsupr (unsigned char*);
-unsigned char* _mbstok (unsigned char*, const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsinc (const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsninc (const unsigned char*, size_t);
+_CRTIMP unsigned char* __cdecl  _mbsdec (const unsigned char*, const unsigned char*);
+_CRTIMP unsigned int __cdecl _mbsnextc  (const unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbslwr (unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbsupr (unsigned char*);
+_CRTIMP unsigned char* __cdecl  _mbstok (unsigned char*, const unsigned char*);
 
 /* Kanji */
-int _ismbchira (unsigned int);
-int _ismbckata (unsigned int);
-int _ismbcl0 (unsigned int);
-int _ismbcl1 (unsigned int);
-int _ismbcl2 (unsigned int);
-unsigned int _mbcjistojms (unsigned int);
-unsigned int _mbcjmstojis (unsigned int);
-unsigned int _mbctohira (unsigned int);
-unsigned int _mbctokata (unsigned int);
+_CRTIMP int __cdecl _ismbchira (unsigned int);
+_CRTIMP int __cdecl _ismbckata (unsigned int);
+_CRTIMP int __cdecl _ismbcl0 (unsigned int);
+_CRTIMP int __cdecl _ismbcl1 (unsigned int);
+_CRTIMP int __cdecl _ismbcl2 (unsigned int);
+_CRTIMP unsigned int __cdecl _mbcjistojms (unsigned int);
+_CRTIMP unsigned int __cdecl _mbcjmstojis (unsigned int);
+_CRTIMP unsigned int __cdecl _mbctohira (unsigned int);
+_CRTIMP unsigned int __cdecl _mbctokata (unsigned int);
 
 #endif	/* Not strict ANSI */
 
diff --git a/winsup/mingw/include/process.h b/winsup/mingw/include/process.h
index adf19e8cd..3fb8ed7e0 100644
--- a/winsup/mingw/include/process.h
+++ b/winsup/mingw/include/process.h
@@ -73,30 +73,30 @@
 extern "C" {
 #endif
 
-void	_cexit(void);
-void	_c_exit(void);
+_CRTIMP void __cdecl _cexit(void);
+_CRTIMP void __cdecl _c_exit(void);
 
-int	_cwait (int*, _pid_t, int);
+_CRTIMP int __cdecl _cwait (int*, _pid_t, int);
 
-_pid_t	_getpid(void);
+_CRTIMP _pid_t __cdecl _getpid(void);
 
-int	_execl		(const char*, const char*, ...);
-int	_execle		(const char*, const char*, ...);
-int	_execlp		(const char*, const char*, ...);
-int	_execlpe	(const char*, const char*, ...);
-int	_execv		(const char*, char* const*);
-int	_execve		(const char*, char* const*, char* const*);
-int	_execvp		(const char*, char* const*);
-int	_execvpe	(const char*, char* const*, char* const*);
+_CRTIMP int __cdecl _execl	(const char*, const char*, ...);
+_CRTIMP int __cdecl _execle		(const char*, const char*, ...);
+_CRTIMP int __cdecl _execlp	(const char*, const char*, ...);
+_CRTIMP int __cdecl _execlpe	(const char*, const char*, ...);
+_CRTIMP int __cdecl _execv	(const char*, char* const*);
+_CRTIMP int __cdecl _execve	(const char*, char* const*, char* const*);
+_CRTIMP int __cdecl _execvp	(const char*, char* const*);
+_CRTIMP int __cdecl _execvpe	(const char*, char* const*, char* const*);
 
-int	_spawnl		(int, const char*, const char*, ...);
-int	_spawnle	(int, const char*, const char*, ...);
-int	_spawnlp	(int, const char*, const char*, ...);
-int	_spawnlpe	(int, const char*, const char*, ...);
-int	_spawnv		(int, const char*, char* const*);
-int	_spawnve	(int, const char*, char* const*, char* const*);
-int	_spawnvp	(int, const char*, char* const*);
-int	_spawnvpe	(int, const char*, char* const*, char* const*);
+_CRTIMP int __cdecl _spawnl	(int, const char*, const char*, ...);
+_CRTIMP int __cdecl _spawnle	(int, const char*, const char*, ...);
+_CRTIMP int __cdecl _spawnlp	(int, const char*, const char*, ...);
+_CRTIMP int __cdecl _spawnlpe	(int, const char*, const char*, ...);
+_CRTIMP int __cdecl _spawnv	(int, const char*, char* const*);
+_CRTIMP int __cdecl _spawnve	(int, const char*, char* const*, char* const*);
+_CRTIMP int __cdecl _spawnvp	(int, const char*, char* const*);
+_CRTIMP int __cdecl _spawnvpe	(int, const char*, char* const*, char* const*);
 
 /*
  * The functions _beginthreadex and _endthreadex are not provided by CRTDLL.
@@ -109,15 +109,15 @@ int	_spawnvpe	(int, const char*, char* const*, char* const*);
  *
  * NOTE: No old names for these functions. Use the underscore.
  */
-unsigned long
+_CRTIMP unsigned long __cdecl
 	_beginthread	(void (*)(void *), unsigned, void*);
-void	_endthread	(void);
+_CRTIMP void __cdecl _endthread	(void);
 
 #ifdef	__MSVCRT__
-unsigned long
+_CRTIMP unsigned long __cdecl
 	_beginthreadex	(void *, unsigned, unsigned (__stdcall *) (void *), 
 			 void*, unsigned, unsigned*);
-void	_endthreadex	(unsigned);
+_CRTIMP void __cdecl _endthreadex (unsigned);
 #endif
 
 
@@ -126,24 +126,24 @@ void	_endthreadex	(unsigned);
  * Functions without the leading underscore, for portability. These functions
  * live in liboldnames.a.
  */
-int	cwait (int*, pid_t, int);
-pid_t	getpid (void);
-int	execl (const char*, const char*, ...);
-int	execle (const char*, const char*, ...);
-int	execlp (const char*, const char*, ...);
-int	execlpe (const char*, const char*, ...);
-int	execv (const char*, char* const*);
-int	execve (const char*, char* const*, char* const*);
-int	execvp (const char*, char* const*);
-int	execvpe (const char*, char* const*, char* const*);
-int	spawnl (int, const char*, const char*, ...);
-int	spawnle (int, const char*, const char*, ...);
-int	spawnlp (int, const char*, const char*, ...);
-int	spawnlpe (int, const char*, const char*, ...);
-int	spawnv (int, const char*, char* const*);
-int	spawnve (int, const char*, char* const*, char* const*);
-int	spawnvp (int, const char*, char* const*);
-int	spawnvpe (int, const char*, char* const*, char* const*);
+_CRTIMP int  __cdecl cwait (int*, pid_t, int);
+_CRTIMP pid_t __cdecl getpid (void);
+_CRTIMP int __cdecl execl (const char*, const char*, ...);
+_CRTIMP int __cdecl execle (const char*, const char*, ...);
+_CRTIMP int __cdecl execlp (const char*, const char*, ...);
+_CRTIMP int __cdecl execlpe (const char*, const char*, ...);
+_CRTIMP int __cdecl execv (const char*, char* const*);
+_CRTIMP int __cdecl execve (const char*, char* const*, char* const*);
+_CRTIMP int __cdecl execvp (const char*, char* const*);
+_CRTIMP int __cdecl execvpe (const char*, char* const*, char* const*);
+_CRTIMP int __cdecl spawnl (int, const char*, const char*, ...);
+_CRTIMP int __cdecl spawnle (int, const char*, const char*, ...);
+_CRTIMP int __cdecl spawnlp (int, const char*, const char*, ...);
+_CRTIMP int __cdecl spawnlpe (int, const char*, const char*, ...);
+_CRTIMP int __cdecl spawnv (int, const char*, char* const*);
+_CRTIMP int __cdecl spawnve (int, const char*, char* const*, char* const*);
+_CRTIMP int __cdecl spawnvp (int, const char*, char* const*);
+_CRTIMP int __cdecl spawnvpe (int, const char*, char* const*, char* const*);
 #endif	/* Not _NO_OLDNAMES */
 
 #ifdef	__cplusplus
diff --git a/winsup/mingw/include/setjmp.h b/winsup/mingw/include/setjmp.h
index 89f045f60..91a650c34 100644
--- a/winsup/mingw/include/setjmp.h
+++ b/winsup/mingw/include/setjmp.h
@@ -52,7 +52,7 @@ typedef _JBTYPE jmp_buf[_JBLEN];
  * The function provided by CRTDLL which appears to do the actual work
  * of setjmp.
  */
-int	_setjmp (jmp_buf);
+_CRTIMP int __cdecl _setjmp (jmp_buf);
 
 #define	setjmp(x)	_setjmp(x)
 
@@ -60,7 +60,7 @@ int	_setjmp (jmp_buf);
  * Return to the last setjmp call and act as if setjmp had returned
  * nVal (which had better be non-zero!).
  */
-void	longjmp (jmp_buf, int);
+_CRTIMP void __cdecl longjmp (jmp_buf, int);
 
 #ifdef __cplusplus
 }
diff --git a/winsup/mingw/include/signal.h b/winsup/mingw/include/signal.h
index 4298accb7..b0a817334 100644
--- a/winsup/mingw/include/signal.h
+++ b/winsup/mingw/include/signal.h
@@ -94,12 +94,12 @@ extern "C" {
  * previous handler, or SIG_ERR if an error occurs. Initially
  * unhandled signals defined above will return SIG_DFL.
  */
-__p_sig_fn_t	signal(int, __p_sig_fn_t);
+_CRTIMP __p_sig_fn_t __cdecl	signal(int, __p_sig_fn_t);
 
 /*
  * Raise the signal indicated by sig. Returns non-zero on success.
  */
-int	raise (int);
+_CRTIMP int __cdecl	raise (int);
 
 #ifdef	__cplusplus
 }
diff --git a/winsup/mingw/include/stdio.h b/winsup/mingw/include/stdio.h
index 6196cc044..6fad92c88 100644
--- a/winsup/mingw/include/stdio.h
+++ b/winsup/mingw/include/stdio.h
@@ -131,11 +131,13 @@
 
 #ifndef	RC_INVOKED
 
+#ifndef __VALIST
 #ifdef __GNUC__
 #define __VALIST __gnuc_va_list
 #else
 #define __VALIST char*
 #endif
+#endif /* defined __VALIST  */
 
 /*
  * The structure underlying the FILE type.
@@ -186,41 +188,41 @@ extern "C" {
 /*
  * File Operations
  */
-FILE*	fopen (const char*, const char*);
-FILE*	freopen (const char*, const char*, FILE*);
-int	fflush (FILE*);
-int	fclose (FILE*);
+_CRTIMP FILE* __cdecl fopen (const char*, const char*);
+_CRTIMP FILE* __cdecl	freopen (const char*, const char*, FILE*);
+_CRTIMP int __cdecl	fflush (FILE*);
+_CRTIMP int __cdecl	fclose (FILE*);
 /* MS puts remove & rename (but not wide versions) in io.h  also */
-int	remove (const char*);
-int	rename (const char*, const char*);
-FILE*	tmpfile (void);
-char*	tmpnam (char*);
-char*	_tempnam (const char*, const char*);
+_CRTIMP int __cdecl	remove (const char*);
+_CRTIMP int __cdecl	rename (const char*, const char*);
+_CRTIMP FILE* __cdecl	tmpfile (void);
+_CRTIMP char* __cdecl	tmpnam (char*);
+_CRTIMP char* __cdecl	_tempnam (const char*, const char*);
 
 #ifndef	NO_OLDNAMES
-char*	tempnam (const char*, const char*);
+_CRTIMP char* __cdecl	tempnam (const char*, const char*);
 #endif
 
-int	setvbuf (FILE*, char*, int, size_t);
+_CRTIMP int __cdecl	setvbuf (FILE*, char*, int, size_t);
 
-void	setbuf (FILE*, char*);
+_CRTIMP void __cdecl	setbuf (FILE*, char*);
 
 /*
  * Formatted Output
  */
 
-int	fprintf (FILE*, const char*, ...);
-int	printf (const char*, ...);
-int	sprintf (char*, const char*, ...);
-int	_snprintf (char*, size_t, const char*, ...);
-int	vfprintf (FILE*, const char*, __VALIST);
-int	vprintf (const char*, __VALIST);
-int	vsprintf (char*, const char*, __VALIST);
-int	_vsnprintf (char*, size_t, const char*, __VALIST);
+_CRTIMP int __cdecl	fprintf (FILE*, const char*, ...);
+_CRTIMP int __cdecl	printf (const char*, ...);
+_CRTIMP int __cdecl	sprintf (char*, const char*, ...);
+_CRTIMP int __cdecl	_snprintf (char*, size_t, const char*, ...);
+_CRTIMP int __cdecl	vfprintf (FILE*, const char*, __VALIST);
+_CRTIMP int __cdecl	vprintf (const char*, __VALIST);
+_CRTIMP int __cdecl	vsprintf (char*, const char*, __VALIST);
+_CRTIMP int __cdecl	_vsnprintf (char*, size_t, const char*, __VALIST);
 
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
-int snprintf(char* s, size_t n, const char*  format, ...);
-extern __inline__ int vsnprintf (char* s, size_t n, const char* format,
+int __cdecl snprintf(char* s, size_t n, const char*  format, ...);
+extern __inline__ int __cdecl vsnprintf (char* s, size_t n, const char* format,
 			   __VALIST arg)
   { return _vsnprintf ( s, n, format, arg); }
 #endif
@@ -229,39 +231,39 @@ extern __inline__ int vsnprintf (char* s, size_t n, const char* format,
  * Formatted Input
  */
 
-int	fscanf (FILE*, const char*, ...);
-int	scanf (const char*, ...);
-int	sscanf (const char*, const char*, ...);
+_CRTIMP int __cdecl	fscanf (FILE*, const char*, ...);
+_CRTIMP int __cdecl	scanf (const char*, ...);
+_CRTIMP int __cdecl	sscanf (const char*, const char*, ...);
 /*
  * Character Input and Output Functions
  */
 
-int	fgetc (FILE*);
-char*	fgets (char*, int, FILE*);
-int	fputc (int, FILE*);
-int	fputs (const char*, FILE*);
-int	getc (FILE*);
-int	getchar (void);
-char*	gets (char*);
-int	putc (int, FILE*);
-int	putchar (int);
-int	puts (const char*);
-int	ungetc (int, FILE*);
+_CRTIMP int __cdecl	fgetc (FILE*);
+_CRTIMP char* __cdecl	fgets (char*, int, FILE*);
+_CRTIMP int __cdecl	fputc (int, FILE*);
+_CRTIMP int __cdecl	fputs (const char*, FILE*);
+_CRTIMP int __cdecl	getc (FILE*);
+_CRTIMP int __cdecl	getchar (void);
+_CRTIMP char* __cdecl	gets (char*);
+_CRTIMP int __cdecl	putc (int, FILE*);
+_CRTIMP int __cdecl	putchar (int);
+_CRTIMP int __cdecl	puts (const char*);
+_CRTIMP int __cdecl	ungetc (int, FILE*);
 
 /*
  * Direct Input and Output Functions
  */
 
-size_t	fread (void*, size_t, size_t, FILE*);
-size_t	fwrite (const void*, size_t, size_t, FILE*);
+_CRTIMP size_t __cdecl	fread (void*, size_t, size_t, FILE*);
+_CRTIMP size_t __cdecl	fwrite (const void*, size_t, size_t, FILE*);
 
 /*
  * File Positioning Functions
  */
 
-int	fseek (FILE*, long, int);
-long	ftell (FILE*);
-void	rewind (FILE*);
+_CRTIMP int __cdecl	fseek (FILE*, long, int);
+_CRTIMP long __cdecl	ftell (FILE*);
+_CRTIMP void __cdecl	rewind (FILE*);
 
 #ifdef __USE_MINGW_FSEEK  /* These are in libmingwex.a */
 /*
@@ -269,8 +271,8 @@ void	rewind (FILE*);
  * not zero'd out if you seek past the end and then write.
  */
 
-int __mingw_fseek (FILE *, long, int);
-int __mingw_fwrite (const void*, size_t, size_t, FILE*);
+int __cdecl __mingw_fseek (FILE *, long, int);
+int __cdecl __mingw_fwrite (const void*, size_t, size_t, FILE*);
 #define fseek(fp, offset, whence)  __mingw_fseek(fp, offset, whence)
 #define fwrite(buffer, size, count, fp)  __mingw_fwrite(buffer, size, count, fp)
 #endif /* __USE_MINGW_FSEEK */
@@ -290,50 +292,50 @@ typedef long long fpos_t;
 typedef long	fpos_t;
 #endif
 
-int	fgetpos	(FILE*, fpos_t*);
-int	fsetpos (FILE*, const fpos_t*);
+_CRTIMP int __cdecl	fgetpos	(FILE*, fpos_t*);
+_CRTIMP int __cdecl	fsetpos (FILE*, const fpos_t*);
 
 /*
  * Error Functions
  */
 
-void	clearerr (FILE*);
-int	feof (FILE*);
-int	ferror (FILE*);
-void	perror (const char*);
+_CRTIMP void __cdecl	clearerr (FILE*);
+_CRTIMP int __cdecl	feof (FILE*);
+_CRTIMP int __cdecl	ferror (FILE*);
+_CRTIMP void __cdecl	perror (const char*);
 
 
 #ifndef __STRICT_ANSI__
 /*
  * Pipes
  */
-FILE*	_popen (const char*, const char*);
-int	_pclose (FILE*);
+_CRTIMP FILE* __cdecl	_popen (const char*, const char*);
+_CRTIMP int __cdecl	_pclose (FILE*);
 
 #ifndef NO_OLDNAMES
-FILE*	popen (const char*, const char*);
-int	pclose (FILE*);
+_CRTIMP FILE* __cdecl	popen (const char*, const char*);
+_CRTIMP int __cdecl	pclose (FILE*);
 #endif
 
 /*
  * Other Non ANSI functions
  */
-int	_flushall (void);
-int	_fgetchar (void);
-int	_fputchar (int);
-FILE*	_fdopen (int, const char*);
-int	_fileno (FILE*);
-int	_fcloseall(void);
+_CRTIMP int __cdecl	_flushall (void);
+_CRTIMP int __cdecl	_fgetchar (void);
+_CRTIMP int __cdecl	_fputchar (int);
+_CRTIMP FILE* __cdecl	_fdopen (int, const char*);
+_CRTIMP int __cdecl	_fileno (FILE*);
+_CRTIMP int __cdecl	_fcloseall(void);
 #ifdef __MSVCRT__
-int	_getmaxstdio(void);
-int	_setmaxstdio(int);
+_CRTIMP int __cdecl	_getmaxstdio(void);
+_CRTIMP int __cdecl	_setmaxstdio(int);
 #endif
 
 #ifndef _NO_OLDNAMES
-int	fgetchar (void);
-int	fputchar (int);
-FILE*	fdopen (int, const char*);
-int	fileno (FILE*);
+_CRTIMP int __cdecl	fgetchar (void);
+_CRTIMP int __cdecl	fputchar (int);
+_CRTIMP FILE* __cdecl	fdopen (int, const char*);
+_CRTIMP int __cdecl	fileno (FILE*);
 #endif	/* Not _NO_OLDNAMES */
 
 #endif	/* Not __STRICT_ANSI__ */
@@ -342,44 +344,44 @@ int	fileno (FILE*);
 
 #ifndef _WSTDIO_DEFINED
 /*  also in wchar.h - keep in sync */
-int	fwprintf (FILE*, const wchar_t*, ...);
-int	wprintf (const wchar_t*, ...);
-int	swprintf (wchar_t*, const wchar_t*, ...);
-int	_snwprintf (wchar_t*, size_t, const wchar_t*, ...);
-int	vfwprintf (FILE*, const wchar_t*, __VALIST);
-int	vwprintf (const wchar_t*, __VALIST);
-int	vswprintf (wchar_t*, const wchar_t*, __VALIST);
-int	_vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
-int	fwscanf (FILE*, const wchar_t*, ...);
-int	wscanf (const wchar_t*, ...);
-int	swscanf (const wchar_t*, const wchar_t*, ...);
-wint_t	fgetwc (FILE*);
-wint_t	fputwc (wchar_t, FILE*);
-wint_t	ungetwc (wchar_t, FILE*);
+_CRTIMP int __cdecl	fwprintf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl	wprintf (const wchar_t*, ...);
+_CRTIMP int __cdecl	swprintf (wchar_t*, const wchar_t*, ...);
+_CRTIMP int __cdecl	_snwprintf (wchar_t*, size_t, const wchar_t*, ...);
+_CRTIMP int __cdecl	vfwprintf (FILE*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl	vwprintf (const wchar_t*, __VALIST);
+_CRTIMP int __cdecl	vswprintf (wchar_t*, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl	_vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST);
+_CRTIMP int __cdecl	fwscanf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl	wscanf (const wchar_t*, ...);
+_CRTIMP int __cdecl	swscanf (const wchar_t*, const wchar_t*, ...);
+_CRTIMP wint_t __cdecl	fgetwc (FILE*);
+_CRTIMP wint_t __cdecl	fputwc (wchar_t, FILE*);
+_CRTIMP wint_t __cdecl	ungetwc (wchar_t, FILE*);
 #ifdef __MSVCRT__ 
-wchar_t* fgetws (wchar_t*, int, FILE*);
-int	fputws (const wchar_t*, FILE*);
-wint_t	getwc (FILE*);
-wint_t	getwchar (void);
-wchar_t* _getws (wchar_t*);
-wint_t	putwc (wint_t, FILE*);
-int	_putws (const wchar_t*);
-wint_t	putwchar (wint_t);
-FILE*	_wfdopen(int, wchar_t *);
-FILE*	_wfopen (const wchar_t*, const wchar_t*);
-FILE*	_wfreopen (const wchar_t*, const wchar_t*, FILE*);
-FILE*	_wfsopen (const wchar_t*, const wchar_t*, int);
-wchar_t* _wtmpnam (wchar_t*);
-wchar_t* _wtempnam (const wchar_t*, const wchar_t*);
-int	_wrename (const wchar_t*, const wchar_t*);
-int	_wremove (const wchar_t*);
-void	_wperror (const wchar_t*);
-FILE*	_wpopen (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl fgetws (wchar_t*, int, FILE*);
+_CRTIMP int __cdecl	fputws (const wchar_t*, FILE*);
+_CRTIMP wint_t __cdecl	getwc (FILE*);
+_CRTIMP wint_t __cdecl	getwchar (void);
+_CRTIMP wchar_t* __cdecl _getws (wchar_t*);
+_CRTIMP wint_t __cdecl	putwc (wint_t, FILE*);
+_CRTIMP int __cdecl	_putws (const wchar_t*);
+_CRTIMP wint_t __cdecl	putwchar (wint_t);
+_CRTIMP FILE* __cdecl	_wfdopen(int, wchar_t *);
+_CRTIMP FILE* __cdecl	_wfopen (const wchar_t*, const wchar_t*);
+_CRTIMP FILE* __cdecl	_wfreopen (const wchar_t*, const wchar_t*, FILE*);
+_CRTIMP FILE* __cdecl	_wfsopen (const wchar_t*, const wchar_t*, int);
+_CRTIMP wchar_t* __cdecl _wtmpnam (wchar_t*);
+_CRTIMP wchar_t* __cdecl _wtempnam (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	_wrename (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	_wremove (const wchar_t*);
+_CRTIMP void __cdecl	_wperror (const wchar_t*);
+_CRTIMP FILE* __cdecl	_wpopen (const wchar_t*, const wchar_t*);
 #endif	/* __MSVCRT__ */
 
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
-int snwprintf(wchar_t* s, size_t n, const wchar_t*  format, ...);
-extern __inline__ int
+int __cdecl snwprintf(wchar_t* s, size_t n, const wchar_t*  format, ...);
+extern __inline__ int __cdecl
 vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
   { return _vsnwprintf ( s, n, format, arg);}
 #endif
@@ -390,23 +392,23 @@ vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg)
 #ifndef __STRICT_ANSI__
 #ifdef __MSVCRT__
 #ifndef NO_OLDNAMES
-FILE*	wpopen (const wchar_t*, const wchar_t*);
+_CRTIMP FILE* __cdecl	wpopen (const wchar_t*, const wchar_t*);
 #endif /* not NO_OLDNAMES */
 #endif /* MSVCRT runtime */
 
 /*
  * Other Non ANSI wide functions
  */
-wint_t	_fgetwchar (void);
-wint_t	_fputwchar (wint_t);
-int	_getw (FILE*);
-int	_putw (int, FILE*);
+_CRTIMP wint_t __cdecl	_fgetwchar (void);
+_CRTIMP wint_t __cdecl	_fputwchar (wint_t);
+_CRTIMP int __cdecl	_getw (FILE*);
+_CRTIMP int __cdecl	_putw (int, FILE*);
 
 #ifndef _NO_OLDNAMES
-wint_t	fgetwchar (void);
-wint_t	fputwchar (wint_t);
-int	getw (FILE*);
-int	putw (int, FILE*);
+_CRTIMP wint_t __cdecl	fgetwchar (void);
+_CRTIMP wint_t __cdecl	fputwchar (wint_t);
+_CRTIMP int __cdecl	getw (FILE*);
+_CRTIMP int __cdecl	putw (int, FILE*);
 #endif	/* Not _NO_OLDNAMES */
 
 #endif /* __STRICT_ANSI */
diff --git a/winsup/mingw/include/stdlib.h b/winsup/mingw/include/stdlib.h
index bd335c74a..f63711d71 100644
--- a/winsup/mingw/include/stdlib.h
+++ b/winsup/mingw/include/stdlib.h
@@ -89,9 +89,9 @@ extern char**	_argv;
 /* imports from runtime dll of the above variables */
 #ifdef __MSVCRT__
 
-extern int*     __p___argc(void);
-extern char***   __p___argv(void);
-extern wchar_t***   __p___wargv(void);
+extern int*  __cdecl   __p___argc(void);
+extern char*** __cdecl  __p___argv(void);
+extern wchar_t***  __cdecl __p___wargv(void);
 
 #define __argc (*__p___argc())
 #define __argv (*__p___argv())
@@ -149,10 +149,10 @@ __MINGW_IMPORT char**  __argv_dll;
 #undef errno
 extern int errno;
 #else
-int*	_errno(void);
+ _CRTIMP int* __cdecl	_errno(void);
 #define	errno		(*_errno())
 #endif
-int*	__doserrno(void);
+ _CRTIMP int* __cdecl	__doserrno(void);
 #define	_doserrno	(*__doserrno())
 
 /*
@@ -160,8 +160,8 @@ int*	__doserrno(void);
  */
 
 #ifdef __MSVCRT__
-  extern char *** __p__environ(void);
-  extern wchar_t *** __p__wenviron(void);
+  extern _CRTIMP char *** __cdecl __p__environ(void);
+  extern _CRTIMP wchar_t *** __cdecl  __p__wenviron(void);
 # define _environ (*__p__environ())
 # define _wenviron (*__p__wenviron())
 #else /* ! __MSVCRT__ */
@@ -221,10 +221,10 @@ __MINGW_IMPORT char*	_sys_errlist[];
 #ifdef	__MSVCRT__
 /* msvcrtxx.dll */
 
-extern unsigned int*	__p__osver(void);
-extern unsigned int*	__p__winver(void);
-extern unsigned int*	__p__winmajor(void);
-extern unsigned int*	__p__winminor(void);
+extern _CRTIMP unsigned __cdecl int*	__p__osver(void);
+extern _CRTIMP unsigned __cdecl int*	__p__winver(void);
+extern _CRTIMP unsigned __cdecl int*	__p__winmajor(void);
+extern _CRTIMP unsigned __cdecl int*	__p__winminor(void);
 
 #ifndef __DECLSPEC_SUPPORTED
 # define _osver		(*__p__osver())
@@ -272,9 +272,9 @@ __MINGW_IMPORT unsigned int	_winminor_dll;
 #if defined  __MSVCRT__
 /* although the _pgmptr is exported as DATA,
  * be safe and use the access function __p__pgmptr() to get it. */
-char**  __p__pgmptr(void);
+_CRTIMP char** __cdecl __p__pgmptr(void);
 #define _pgmptr     (*__p__pgmptr())
-wchar_t**  __p__wpgmptr(void);
+_CRTIMP wchar_t** __cdecl __p__wpgmptr(void);
 #define _wpgmptr    (*__p__wpgmptr())
 #else /* ! __MSVCRT__ */
 # ifndef __DECLSPEC_SUPPORTED
@@ -321,65 +321,67 @@ __MINGW_IMPORT  int _fmode_dll;
 #define	_ATTRIB_NORETURN
 #endif	/* __GNUC__ */
 
-double	atof	(const char*);
-int	atoi	(const char*);
-long	atol	(const char*);
-int	_wtoi (const wchar_t *);
-long _wtol (const wchar_t *);
+_CRTIMP double __cdecl	atof	(const char*);
+_CRTIMP int __cdecl	atoi	(const char*);
+_CRTIMP long __cdecl 	atol	(const char*);
+_CRTIMP int __cdecl	_wtoi (const wchar_t *);
+_CRTIMP long __cdecl _wtol (const wchar_t *);
 
-double	strtod	(const char*, char**);
-#if !defined __NO_ISOCEXT  /* extern stubs in static libmingwex.a */
-extern __inline__ float strtof (const char *nptr, char **endptr)
+_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)
   { return (strtod (nptr, endptr));}
-long double strtold (const char * __restrict__, char ** __restrict__);
+long double __cdecl strtold (const char * __restrict__, char ** __restrict__);
 #endif /* __NO_ISOCEXT */
 
-long	strtol	(const char*, char**, int);
-unsigned long	strtoul	(const char*, char**, int);
+_CRTIMP long __cdecl	strtol	(const char*, char**, int);
+_CRTIMP unsigned long __cdecl	strtoul	(const char*, char**, int);
 
 #ifndef _WSTDLIB_DEFINED
 /*  also declared in wchar.h */
-double	wcstod	(const wchar_t*, wchar_t**);
+_CRTIMP double __cdecl	wcstod	(const wchar_t*, wchar_t**);
 #if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
-extern __inline__ float wcstof( const wchar_t *nptr, wchar_t **endptr)
+extern __inline__ float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
 {  return (wcstod(nptr, endptr)); }
-long double wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
+long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
 #endif /* __NO_ISOCEXT */
 
-long	wcstol	(const wchar_t*, wchar_t**, int);
-unsigned long	wcstoul (const wchar_t*, wchar_t**, int);
+_CRTIMP long __cdecl	wcstol	(const wchar_t*, wchar_t**, int);
+_CRTIMP unsigned long __cdecl	wcstoul (const wchar_t*, wchar_t**, int);
 #define _WSTDLIB_DEFINED
 #endif
 
-size_t	wcstombs	(char*, const wchar_t*, size_t);
-int	wctomb		(char*, wchar_t);
+_CRTIMP size_t __cdecl	wcstombs	(char*, const wchar_t*, size_t);
+_CRTIMP int __cdecl	wctomb		(char*, wchar_t);
 
-int	mblen		(const char*, size_t);
-size_t	mbstowcs	(wchar_t*, const char*, size_t);
-int	mbtowc		(wchar_t*, const char*, size_t);
+_CRTIMP int __cdecl	mblen		(const char*, size_t);
+_CRTIMP size_t __cdecl	mbstowcs	(wchar_t*, const char*, size_t);
+_CRTIMP int __cdecl	mbtowc		(wchar_t*, const char*, size_t);
 
-int	rand	(void);
-void	srand	(unsigned int);
+_CRTIMP int __cdecl	rand	(void);
+_CRTIMP void __cdecl	srand	(unsigned int);
 
-void*	calloc	(size_t, size_t);
-void*	malloc	(size_t);
-void*	realloc	(void*, size_t);
-void	free	(void*);
+_CRTIMP void* __cdecl	calloc	(size_t, size_t);
+_CRTIMP void* __cdecl	malloc	(size_t);
+_CRTIMP void* __cdecl	realloc	(void*, size_t);
+_CRTIMP void __cdecl	free	(void*);
 
-void	abort	(void) _ATTRIB_NORETURN;
-void	exit	(int) _ATTRIB_NORETURN;
-int	atexit	(void (*)(void));
+_CRTIMP void __cdecl	abort	(void) _ATTRIB_NORETURN;
+_CRTIMP void __cdecl	exit	(int) _ATTRIB_NORETURN;
 
-int	system	(const char*);
-char*	getenv	(const char*);
+/* Note: This in startup code, not imported directly from dll */
+int __cdecl	atexit	(void (*)(void));
 
-void*	bsearch	(const void*, const void*, size_t, size_t, 
-                 int (*)(const void*, const void*));
-void	qsort	(const void*, size_t, size_t,
-                 int (*)(const void*, const void*));
+_CRTIMP int __cdecl	system	(const char*);
+_CRTIMP char* __cdecl	getenv	(const char*);
 
-int	abs	(int);
-long	labs	(long);
+_CRTIMP void* __cdecl	bsearch	(const void*, const void*, size_t, size_t, 
+				 int (*)(const void*, const void*));
+_CRTIMP void __cdecl	qsort	(const void*, size_t, size_t,
+				 int (*)(const void*, const void*));
+
+_CRTIMP int __cdecl	abs	(int);
+_CRTIMP long __cdecl	labs	(long);
 
 /*
  * div_t and ldiv_t are structures used to return the results of div and
@@ -392,8 +394,8 @@ long	labs	(long);
 typedef struct { int quot, rem; } div_t;
 typedef struct { long quot, rem; } ldiv_t;
 
-div_t	div	(int, int);
-ldiv_t	ldiv	(long, long);
+_CRTIMP div_t __cdecl	div	(int, int);
+_CRTIMP ldiv_t __cdecl	ldiv	(long, long);
 
 #ifndef	__STRICT_ANSI__
 
@@ -401,74 +403,75 @@ ldiv_t	ldiv	(long, long);
  * NOTE: Officially the three following functions are obsolete. The Win32 API
  *       functions SetErrorMode, Beep and Sleep are their replacements.
  */
-void	_beep (unsigned int, unsigned int);
-void	_seterrormode (int);
-void	_sleep (unsigned long);
+_CRTIMP void __cdecl	_beep (unsigned int, unsigned int);
+_CRTIMP void __cdecl	_seterrormode (int);
+_CRTIMP void __cdecl	_sleep (unsigned long);
 
-void	_exit	(int) _ATTRIB_NORETURN;
+_CRTIMP void __cdecl	_exit	(int) _ATTRIB_NORETURN;
 #if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
 /* C99 function name */
-void _Exit(int) _ATTRIB_NORETURN; /* Declare to get noreturn attribute.  */
-extern __inline__ void _Exit(int status)
+void __cdecl _Exit(int) _ATTRIB_NORETURN; /* Declare to get noreturn attribute.  */
+extern __inline__ void __cdecl _Exit(int status)
 	{  _exit(status); }
 #endif
 /* _onexit is MS extension. Use atexit for portability.  */
+/* Note: This is in startup code, not imported directly from dll */
 typedef  int (* _onexit_t)(void);
-_onexit_t _onexit( _onexit_t );
+_onexit_t __cdecl _onexit( _onexit_t );
 
-int	_putenv	(const char*);
-void	_searchenv (const char*, const char*, char*);
+_CRTIMP int __cdecl	_putenv	(const char*);
+_CRTIMP void __cdecl	_searchenv (const char*, const char*, char*);
 
 
-char*	_ecvt (double, int, int*, int*);
-char*	_fcvt (double, int, int*, int*);
-char*	_gcvt (double, int, char*);
+_CRTIMP char* __cdecl	_ecvt (double, int, int*, int*);
+_CRTIMP char* __cdecl	_fcvt (double, int, int*, int*);
+_CRTIMP char* __cdecl	_gcvt (double, int, char*);
 
-void	_makepath (char*, const char*, const char*, const char*, const char*);
-void	_splitpath (const char*, char*, char*, char*, char*);
-char*	_fullpath (char*, const char*, size_t);
+_CRTIMP void __cdecl	_makepath (char*, const char*, const char*, const char*, const char*);
+_CRTIMP void __cdecl	_splitpath (const char*, char*, char*, char*, char*);
+_CRTIMP char* __cdecl	_fullpath (char*, const char*, size_t);
 
 
-char*	_itoa (int, char*, int);
-char*	_ltoa (long, char*, int);
-char*   _ultoa(unsigned long, char*, int);
-wchar_t*  _itow (int, wchar_t*, int);
-wchar_t*  _ltow (long, wchar_t*, int);
-wchar_t*  _ultow (unsigned long, wchar_t*, int);
+_CRTIMP char* __cdecl	_itoa (int, char*, int);
+_CRTIMP char* __cdecl	_ltoa (long, char*, int);
+_CRTIMP char* __cdecl   _ultoa(unsigned long, char*, int);
+_CRTIMP wchar_t* __cdecl  _itow (int, wchar_t*, int);
+_CRTIMP wchar_t* __cdecl  _ltow (long, wchar_t*, int);
+_CRTIMP wchar_t* __cdecl  _ultow (unsigned long, wchar_t*, int);
 
 #ifdef __MSVCRT__
-__int64	_atoi64(const char *);
-char*	_i64toa(__int64, char *, int);
-char*	_ui64toa(unsigned __int64, char *, int);
-__int64	_wtoi64(const wchar_t *);
-wchar_t* _i64tow(__int64, wchar_t *, int);
-wchar_t* _ui64tow(unsigned __int64, wchar_t *, int);
+_CRTIMP __int64 __cdecl	_atoi64(const char *);
+_CRTIMP char* __cdecl	_i64toa(__int64, char *, int);
+_CRTIMP char* __cdecl	_ui64toa(unsigned __int64, char *, int);
+_CRTIMP __int64 __cdecl	_wtoi64(const wchar_t *);
+_CRTIMP wchar_t* __cdecl _i64tow(__int64, wchar_t *, int);
+_CRTIMP wchar_t* __cdecl _ui64tow(unsigned __int64, wchar_t *, int);
 
-wchar_t* _wgetenv(const wchar_t*);
-int	 _wputenv(const wchar_t*);
-void	_wsearchenv(const wchar_t*, const wchar_t*, wchar_t*);
-void    _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*);
-void	_wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*);
-wchar_t*    _wfullpath (wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl _wgetenv(const wchar_t*);
+_CRTIMP int __cdecl	 _wputenv(const wchar_t*);
+_CRTIMP void __cdecl	_wsearchenv(const wchar_t*, const wchar_t*, wchar_t*);
+_CRTIMP void __cdecl    _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*);
+_CRTIMP void __cdecl	_wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*);
+_CRTIMP wchar_t* __cdecl    _wfullpath (wchar_t*, const wchar_t*, size_t);
 
-unsigned int _rotl(unsigned int, int);
-unsigned int _rotr(unsigned int, int);
-unsigned long _lrotl(unsigned long, int);
-unsigned long _lrotr(unsigned long, int);
+_CRTIMP unsigned int __cdecl _rotl(unsigned int, int);
+_CRTIMP unsigned int __cdecl _rotr(unsigned int, int);
+_CRTIMP unsigned long __cdecl _lrotl(unsigned long, int);
+_CRTIMP unsigned long __cdecl _lrotr(unsigned long, int);
 #endif
 
 #ifndef	_NO_OLDNAMES
 
-int	putenv (const char*);
-void	searchenv (const char*, const char*, char*);
+_CRTIMP int __cdecl	putenv (const char*);
+_CRTIMP void __cdecl	searchenv (const char*, const char*, char*);
 
-char*	itoa (int, char*, int);
-char*	ltoa (long, char*, int);
+_CRTIMP char* __cdecl	itoa (int, char*, int);
+_CRTIMP char* __cdecl	ltoa (long, char*, int);
 
 #ifndef _UWIN
-char*	ecvt (double, int, int*, int*);
-char*	fcvt (double, int, int*, int*);
-char*	gcvt (double, int, char*);
+_CRTIMP char* __cdecl	ecvt (double, int, int*, int*);
+_CRTIMP char* __cdecl	fcvt (double, int, int*, int*);
+_CRTIMP char* __cdecl	gcvt (double, int, char*);
 #endif /* _UWIN */
 #endif	/* Not _NO_OLDNAMES */
 
@@ -480,36 +483,36 @@ char*	gcvt (double, int, char*);
 
 typedef struct { long long quot, rem; } lldiv_t;
 
-lldiv_t	lldiv (long long, long long);
+lldiv_t	__cdecl lldiv (long long, long long);
 
-extern __inline__ long long llabs(long long _j)
+extern __inline__ long long __cdecl llabs(long long _j)
   {return (_j >= 0 ? _j : -_j);}
 
-long long strtoll (const char* __restrict__, char** __restrict, int);
-unsigned long long strtoull (const char* __restrict__, char** __restrict__, int);
+long long  __cdecl strtoll (const char* __restrict__, char** __restrict, int);
+unsigned long long  __cdecl strtoull (const char* __restrict__, char** __restrict__, int);
 
 #if defined (__MSVCRT__) /* these are stubs for MS _i64 versions */ 
-long long atoll (const char *);
+long long  __cdecl atoll (const char *);
 
 #if !defined (__STRICT_ANSI__)
-long long wtoll(const wchar_t *);
-char* lltoa(long long, char *, int);
-char* ulltoa(unsigned long long , char *, int);
-wchar_t* lltow(long long, wchar_t *, int);
-wchar_t* ulltow(unsigned long long, wchar_t *, int);
+long long  __cdecl wtoll (const wchar_t *);
+char* __cdecl lltoa (long long, char *, int);
+char* __cdecl ulltoa (unsigned long long , char *, int);
+wchar_t* __cdecl lltow (long long, wchar_t *, int);
+wchar_t* __cdecl ulltow (unsigned long long, wchar_t *, int);
 
   /* inline using non-ansi functions */
-extern __inline__ long long atoll (const char * _c)
+extern __inline__ long long  __cdecl atoll (const char * _c)
 	{ return _atoi64 (_c); }
-extern __inline__ char* lltoa(long long _n, char * _c, int _i)
+extern __inline__ char*  __cdecl lltoa (long long _n, char * _c, int _i)
 	{ return _i64toa (_n, _c, _i); }
-extern __inline__ char* ulltoa(unsigned long long _n, char * _c, int _i)
+extern __inline__ char*  __cdecl ulltoa (unsigned long long _n, char * _c, int _i)
 	{ return _ui64toa (_n, _c, _i); }
-extern __inline__ long long wtoll(const wchar_t * _w)
+extern __inline__ long long  __cdecl wtoll (const wchar_t * _w)
  	{ return _wtoi64 (_w); }
-extern __inline__ wchar_t* lltow(long long _n, wchar_t * _w, int _i)
+extern __inline__ wchar_t*  __cdecl lltow (long long _n, wchar_t * _w, int _i)
 	{ return _i64tow (_n, _w, _i); } 
-extern __inline__ wchar_t* ulltow(unsigned long long _n, wchar_t * _w, int _i)
+extern __inline__ wchar_t*  __cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i)
 	{ return _ui64tow (_n, _w, _i); } 
 #endif /* (__STRICT_ANSI__)  */
 
diff --git a/winsup/mingw/include/string.h b/winsup/mingw/include/string.h
index 7647c29c8..9f6b2bfbf 100644
--- a/winsup/mingw/include/string.h
+++ b/winsup/mingw/include/string.h
@@ -49,52 +49,52 @@ extern "C" {
 /*
  * Prototypes of the ANSI Standard C library string functions.
  */
-void*	memchr (const void*, int, size_t);
-int 	memcmp (const void*, const void*, size_t);
-void* 	memcpy (void*, const void*, size_t);
-void*	memmove (void*, const void*, size_t);
-void*	memset (void*, int, size_t);
-char*	strcat (char*, const char*);
-char*	strchr (const char*, int);
-int	strcmp (const char*, const char*);
-int	strcoll (const char*, const char*);	/* Compare using locale */
-char*	strcpy (char*, const char*);
-size_t	strcspn (const char*, const char*);
-char*	strerror (int); /* NOTE: NOT an old name wrapper. */
+_CRTIMP void* __cdecl	memchr (const void*, int, size_t);
+_CRTIMP int __cdecl 	memcmp (const void*, const void*, size_t);
+_CRTIMP void* __cdecl 	memcpy (void*, const void*, size_t);
+_CRTIMP void* __cdecl	memmove (void*, const void*, size_t);
+_CRTIMP void* __cdecl	memset (void*, int, size_t);
+_CRTIMP char* __cdecl	strcat (char*, const char*);
+_CRTIMP char* __cdecl	strchr (const char*, int);
+_CRTIMP int __cdecl	strcmp (const char*, const char*);
+_CRTIMP int __cdecl	strcoll (const char*, const char*);	/* Compare using locale */
+_CRTIMP char* __cdecl	strcpy (char*, const char*);
+_CRTIMP size_t __cdecl	strcspn (const char*, const char*);
+_CRTIMP char* __cdecl	strerror (int); /* NOTE: NOT an old name wrapper. */
 
-size_t	strlen (const char*);
-char*	strncat (char*, const char*, size_t);
-int	strncmp (const char*, const char*, size_t);
-char*	strncpy (char*, const char*, size_t);
-char*	strpbrk (const char*, const char*);
-char*	strrchr (const char*, int);
-size_t	strspn (const char*, const char*);
-char*	strstr (const char*, const char*);
-char*	strtok (char*, const char*);
-size_t	strxfrm (char*, const char*, size_t);
+_CRTIMP size_t __cdecl	strlen (const char*);
+_CRTIMP char* __cdecl	strncat (char*, const char*, size_t);
+_CRTIMP int __cdecl	strncmp (const char*, const char*, size_t);
+_CRTIMP char* __cdecl	strncpy (char*, const char*, size_t);
+_CRTIMP char* __cdecl	strpbrk (const char*, const char*);
+_CRTIMP char* __cdecl	strrchr (const char*, int);
+_CRTIMP size_t __cdecl	strspn (const char*, const char*);
+_CRTIMP char* __cdecl	strstr (const char*, const char*);
+_CRTIMP char* __cdecl	strtok (char*, const char*);
+_CRTIMP size_t __cdecl	strxfrm (char*, const char*, size_t);
 
 #ifndef __STRICT_ANSI__
 /*
  * Extra non-ANSI functions provided by the CRTDLL library
  */
-char*	_strerror (const char *);
-void*	_memccpy (void*, const void*, int, size_t);
-int 	_memicmp (const void*, const void*, size_t);
-char* 	_strdup (const char*);
-int	_strcmpi (const char*, const char*);
-int	_stricmp (const char*, const char*);
-int	_stricoll (const char*, const char*);
-char*	_strlwr (char*);
-int	_strnicmp (const char*, const char*, size_t);
-char*	_strnset (char*, int, size_t);
-char*	_strrev (char*);
-char*	_strset (char*, int);
-char*	_strupr (char*);
-void	_swab (const char*, char*, size_t);
+_CRTIMP char* __cdecl	_strerror (const char *);
+_CRTIMP void* __cdecl	_memccpy (void*, const void*, int, size_t);
+_CRTIMP int __cdecl 	_memicmp (const void*, const void*, size_t);
+_CRTIMP char* __cdecl 	_strdup (const char*);
+_CRTIMP int __cdecl	_strcmpi (const char*, const char*);
+_CRTIMP int __cdecl	_stricmp (const char*, const char*);
+_CRTIMP int __cdecl	_stricoll (const char*, const char*);
+_CRTIMP char* __cdecl	_strlwr (char*);
+_CRTIMP int __cdecl	_strnicmp (const char*, const char*, size_t);
+_CRTIMP char* __cdecl	_strnset (char*, int, size_t);
+_CRTIMP char* __cdecl	_strrev (char*);
+_CRTIMP char* __cdecl	_strset (char*, int);
+_CRTIMP char* __cdecl	_strupr (char*);
+_CRTIMP void __cdecl	_swab (const char*, char*, size_t);
 
 #ifdef __MSVCRT__
-int  _strncoll(const char*, const char*, size_t);
-int  _strnicoll(const char*, const char*, size_t);
+_CRTIMP int __cdecl  _strncoll(const char*, const char*, size_t);
+_CRTIMP int __cdecl  _strnicoll(const char*, const char*, size_t);
 #endif
 
 #endif	/* Not __STRICT_ANSI__ */
@@ -102,23 +102,23 @@ int  _strnicoll(const char*, const char*, size_t);
 /*
  * Unicode versions of the standard calls.
  */
-wchar_t* wcscat (wchar_t*, const wchar_t*);
-wchar_t* wcschr (const wchar_t*, wchar_t);
-int	wcscmp (const wchar_t*, const wchar_t*);
-int	wcscoll (const wchar_t*, const wchar_t*);
-wchar_t* wcscpy (wchar_t*, const wchar_t*);
-size_t	wcscspn (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcscat (wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcschr (const wchar_t*, wchar_t);
+_CRTIMP int __cdecl	wcscmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	wcscoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcscpy (wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl	wcscspn (const wchar_t*, const wchar_t*);
 /* Note: No wcserror in CRTDLL. */
-size_t	wcslen (const wchar_t*);
-wchar_t* wcsncat (wchar_t*, const wchar_t*, size_t);
-int	wcsncmp(const wchar_t*, const wchar_t*, size_t);
-wchar_t* wcsncpy(wchar_t*, const wchar_t*, size_t);
-wchar_t* wcspbrk(const wchar_t*, const wchar_t*);
-wchar_t* wcsrchr(const wchar_t*, wchar_t);
-size_t	wcsspn(const wchar_t*, const wchar_t*);
-wchar_t* wcsstr(const wchar_t*, const wchar_t*);
-wchar_t* wcstok(wchar_t*, const wchar_t*);
-size_t	wcsxfrm(wchar_t*, const wchar_t*, size_t);
+_CRTIMP size_t __cdecl	wcslen (const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcsncat (wchar_t*, const wchar_t*, size_t);
+_CRTIMP int __cdecl	wcsncmp(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl wcsncpy(wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl wcspbrk(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcsrchr(const wchar_t*, wchar_t);
+_CRTIMP size_t __cdecl	wcsspn(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcsstr(const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcstok(wchar_t*, const wchar_t*);
+_CRTIMP size_t __cdecl	wcsxfrm(wchar_t*, const wchar_t*, size_t);
 
 #ifndef	__STRICT_ANSI__
 /*
@@ -128,19 +128,19 @@ size_t	wcsxfrm(wchar_t*, const wchar_t*, size_t);
 /* NOTE: _wcscmpi not provided by CRTDLL, this define is for portability */
 #define		_wcscmpi	_wcsicmp
 
-wchar_t* _wcsdup (const wchar_t*);
-int	_wcsicmp (const wchar_t*, const wchar_t*);
-int	_wcsicoll (const wchar_t*, const wchar_t*);
-wchar_t* _wcslwr (wchar_t*);
-int	_wcsnicmp (const wchar_t*, const wchar_t*, size_t);
-wchar_t* _wcsnset (wchar_t*, wchar_t, size_t);
-wchar_t* _wcsrev (wchar_t*);
-wchar_t* _wcsset (wchar_t*, wchar_t);
-wchar_t* _wcsupr (wchar_t*);
+_CRTIMP wchar_t* __cdecl _wcsdup (const wchar_t*);
+_CRTIMP int __cdecl	_wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	_wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl _wcslwr (wchar_t*);
+_CRTIMP int __cdecl	_wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl _wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl _wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl _wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl _wcsupr (wchar_t*);
 
 #ifdef __MSVCRT__
-int  _wcsncoll(const wchar_t*, const wchar_t*, size_t);
-int  _wcsnicoll(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP int __cdecl  _wcsncoll(const wchar_t*, const wchar_t*, size_t);
+_CRTIMP int __cdecl  _wcsnicoll(const wchar_t*, const wchar_t*, size_t);
 #endif
 
 
@@ -156,41 +156,41 @@ int  _wcsnicoll(const wchar_t*, const wchar_t*, size_t);
  * strcasecmp.
  */
 
-void*	memccpy (void*, const void*, int, size_t);
-int	memicmp (const void*, const void*, size_t);
-char*	strdup (const char*);
-int	strcmpi (const char*, const char*);
-int	stricmp (const char*, const char*);
-extern __inline__ int
+_CRTIMP void* __cdecl	memccpy (void*, const void*, int, size_t);
+_CRTIMP int __cdecl	memicmp (const void*, const void*, size_t);
+_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
 strcasecmp (const char * __sz1, const char * __sz2)
   {return _stricmp (__sz1, __sz2);}
-int	stricoll (const char*, const char*);
-char*	strlwr (char*);
-int	strnicmp (const char*, const char*, size_t);
-extern __inline__ int
+_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
 strncasecmp (const char * __sz1, const char * __sz2, size_t __sizeMaxCompare)
   {return _strnicmp (__sz1, __sz2, __sizeMaxCompare);}
-char*	strnset (char*, int, size_t);
-char*	strrev (char*);
-char*	strset (char*, int);
-char*	strupr (char*);
+_CRTIMP char* __cdecl	strnset (char*, int, size_t);
+_CRTIMP char* __cdecl	strrev (char*);
+_CRTIMP char* __cdecl	strset (char*, int);
+_CRTIMP char* __cdecl	strupr (char*);
 #ifndef _UWIN
-void	swab (const char*, char*, size_t);
+_CRTIMP void __cdecl	swab (const char*, char*, size_t);
 #endif /* _UWIN */
 
 /* NOTE: There is no _wcscmpi, but this is for compatibility. */
-extern __inline__ int
+extern __inline__ int __cdecl
 wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2)
   {return _wcsicmp (__ws1, __ws2);}
-wchar_t* wcsdup (wchar_t*);
-int	wcsicmp (const wchar_t*, const wchar_t*);
-int	wcsicoll (const wchar_t*, const wchar_t*);
-wchar_t* wcslwr (wchar_t*);
-int	wcsnicmp (const wchar_t*, const wchar_t*, size_t);
-wchar_t* wcsnset (wchar_t*, wchar_t, size_t);
-wchar_t* wcsrev (wchar_t*);
-wchar_t* wcsset (wchar_t*, wchar_t);
-wchar_t* wcsupr (wchar_t*);
+_CRTIMP wchar_t* __cdecl wcsdup (wchar_t*);
+_CRTIMP int __cdecl	wcsicmp (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	wcsicoll (const wchar_t*, const wchar_t*);
+_CRTIMP wchar_t* __cdecl wcslwr (wchar_t*);
+_CRTIMP int __cdecl	wcsnicmp (const wchar_t*, const wchar_t*, size_t);
+_CRTIMP wchar_t* __cdecl wcsnset (wchar_t*, wchar_t, size_t);
+_CRTIMP wchar_t* __cdecl wcsrev (wchar_t*);
+_CRTIMP wchar_t* __cdecl wcsset (wchar_t*, wchar_t);
+_CRTIMP wchar_t* __cdecl wcsupr (wchar_t*);
 
 #endif	/* Not _NO_OLDNAMES */
 #endif	/* Not strict ANSI */
diff --git a/winsup/mingw/include/sys/stat.h b/winsup/mingw/include/sys/stat.h
index 1620b0684..f851c25f4 100644
--- a/winsup/mingw/include/sys/stat.h
+++ b/winsup/mingw/include/sys/stat.h
@@ -154,16 +154,16 @@ struct _stati64 {
 extern "C" {
 #endif
 
-int	_fstat (int, struct _stat*);
-int	_chmod (const char*, int);
-int	_stat (const char*, struct _stat*);
+_CRTIMP int __cdecl	_fstat (int, struct _stat*);
+_CRTIMP int __cdecl	_chmod (const char*, int);
+_CRTIMP int __cdecl	_stat (const char*, struct _stat*);
 
 #if defined (__MSVCRT__)
-int  _fstati64(int, struct _stati64 *);
-int  _stati64(const char *, struct _stati64 *);
+_CRTIMP int __cdecl  _fstati64(int, struct _stati64 *);
+_CRTIMP int __cdecl  _stati64(const char *, struct _stati64 *);
 #if !defined ( _WSTAT_DEFINED) /* also declared in wchar.h */
-int	_wstat(const wchar_t*, struct _stat*);
-int	_wstati64 (const wchar_t*, struct _stati64*);
+_CRTIMP int __cdecl	_wstat(const wchar_t*, struct _stat*);
+_CRTIMP int __cdecl	_wstati64 (const wchar_t*, struct _stati64*);
 #define _WSTAT_DEFINED
 #endif /* _WSTAT_DEFIND */
 #endif /* __MSVCRT__ */
@@ -171,9 +171,9 @@ int	_wstati64 (const wchar_t*, struct _stati64*);
 #ifndef	_NO_OLDNAMES
 
 /* These functions live in liboldnames.a. */
-int	fstat (int, struct stat*);
-int	chmod (const char*, int);
-int	stat (const char*, struct stat*);
+_CRTIMP int __cdecl	fstat (int, struct stat*);
+_CRTIMP int __cdecl	chmod (const char*, int);
+_CRTIMP int __cdecl	stat (const char*, struct stat*);
 
 #endif	/* Not _NO_OLDNAMES */
 
diff --git a/winsup/mingw/include/sys/timeb.h b/winsup/mingw/include/sys/timeb.h
index 201116275..16b4dc0a4 100644
--- a/winsup/mingw/include/sys/timeb.h
+++ b/winsup/mingw/include/sys/timeb.h
@@ -64,10 +64,10 @@ extern "C" {
 #endif
 
 /* TODO: Not tested. */
-void	_ftime (struct _timeb*);
+_CRTIMP void __cdecl	_ftime (struct _timeb*);
 
 #ifndef	_NO_OLDNAMES
-void	ftime (struct timeb*);
+_CRTIMP void __cdecl	ftime (struct timeb*);
 #endif	/* Not _NO_OLDNAMES */
 
 #ifdef	__cplusplus
diff --git a/winsup/mingw/include/sys/utime.h b/winsup/mingw/include/sys/utime.h
index 7c907f32a..1ddeabafa 100644
--- a/winsup/mingw/include/sys/utime.h
+++ b/winsup/mingw/include/sys/utime.h
@@ -65,16 +65,16 @@ struct utimbuf
 extern "C" {
 #endif
 
-int	_utime (const char*, struct _utimbuf*);
-int	_futime (int, struct _utimbuf*);
+_CRTIMP int __cdecl	_utime (const char*, struct _utimbuf*);
+_CRTIMP int __cdecl	_futime (int, struct _utimbuf*);
 
 /* The wide character version, only available for MSVCRT versions of the
  * C runtime library. */
 #ifdef __MSVCRT__
-int	_wutime (const wchar_t*, struct _utimbuf*);
+_CRTIMP int __cdecl	_wutime (const wchar_t*, struct _utimbuf*);
 #endif /* MSVCRT runtime */
 #ifndef	_NO_OLDNAMES
-int	utime (const char*, struct utimbuf*);
+_CRTIMP int __cdecl	utime (const char*, struct utimbuf*);
 #endif	/* Not _NO_OLDNAMES */
 
 #ifdef	__cplusplus
diff --git a/winsup/mingw/include/time.h b/winsup/mingw/include/time.h
index 6d15c2f89..0b8ef01f3 100644
--- a/winsup/mingw/include/time.h
+++ b/winsup/mingw/include/time.h
@@ -93,10 +93,10 @@ struct tm
 extern "C" {
 #endif
 
-clock_t	clock (void);
-time_t	time (time_t*);
-double	difftime (time_t, time_t);
-time_t	mktime (struct tm*);
+_CRTIMP clock_t __cdecl	clock (void);
+_CRTIMP time_t __cdecl	time (time_t*);
+_CRTIMP double __cdecl	difftime (time_t, time_t);
+_CRTIMP time_t __cdecl	mktime (struct tm*);
 
 /*
  * These functions write to and return pointers to static buffers that may
@@ -108,26 +108,26 @@ time_t	mktime (struct tm*);
  * Fault and crap out your program. Guess how I know. Hint: stat called on
  * a directory gives 'invalid' times in st_atime etc...
  */
-char*		asctime (const struct tm*);
-char*		ctime (const time_t*);
-struct tm*	gmtime (const time_t*);
-struct tm*	localtime (const time_t*);
+_CRTIMP char* __cdecl		asctime (const struct tm*);
+_CRTIMP char* __cdecl		ctime (const time_t*);
+_CRTIMP struct tm*  __cdecl	gmtime (const time_t*);
+_CRTIMP struct tm*  __cdecl	localtime (const time_t*);
 
 
-size_t	strftime (char*, size_t, const char*, const struct tm*);
+_CRTIMP size_t __cdecl	strftime (char*, size_t, const char*, const struct tm*);
 
-size_t	wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
+_CRTIMP size_t __cdecl	wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
 
 #ifndef __STRICT_ANSI__
-extern void	_tzset (void);
+extern _CRTIMP void __cdecl	_tzset (void);
 
 #ifndef _NO_OLDNAMES
-extern void	tzset (void);
+extern _CRTIMP void __cdecl	tzset (void);
 #endif
 
-size_t	strftime(char*, size_t, const char*, const struct tm*);
-char*	_strdate(char*);
-char*	_strtime(char*);
+_CRTIMP size_t __cdecl	strftime(char*, size_t, const char*, const struct tm*);
+_CRTIMP char* __cdecl	_strdate(char*);
+_CRTIMP char* __cdecl	_strtime(char*);
 
 #endif	/* Not __STRICT_ANSI__ */
 
@@ -140,9 +140,9 @@ char*	_strtime(char*);
 #ifdef __MSVCRT__
 
 /* These are for compatibility with pre-VC 5.0 suppied MSVCRT. */
-extern int*	__p__daylight (void);
-extern long*	__p__timezone (void);
-extern char**	__p__tzname (void);
+extern _CRTIMP int* __cdecl	__p__daylight (void);
+extern _CRTIMP long* __cdecl	__p__timezone (void);
+extern _CRTIMP char** __cdecl	__p__tzname (void);
 
 __MINGW_IMPORT int	_daylight;
 __MINGW_IMPORT long	_timezone;
@@ -186,10 +186,10 @@ __MINGW_IMPORT char 	*tzname[2];
 
 /* wide function prototypes, also declared in wchar.h */
 
-wchar_t *	_wasctime(const struct tm*);
-wchar_t *	_wctime(const time_t*);
-wchar_t*	_wstrdate(wchar_t*);
-wchar_t*	_wstrtime(wchar_t*);
+_CRTIMP wchar_t* __cdecl	_wasctime(const struct tm*);
+_CRTIMP wchar_t* __cdecl	_wctime(const time_t*);
+_CRTIMP wchar_t* __cdecl	_wstrdate(wchar_t*);
+_CRTIMP wchar_t* __cdecl	_wstrtime(wchar_t*);
 
 #define _WTIME_DEFINED
 #endif /* _WTIME_DEFINED */ 
diff --git a/winsup/mingw/include/wchar.h b/winsup/mingw/include/wchar.h
index 3c3fa2931..90bb82726 100644
--- a/winsup/mingw/include/wchar.h
+++ b/winsup/mingw/include/wchar.h
@@ -85,65 +85,65 @@ struct _wfinddatai64_t {
    applies to other wide character versions? */
 #if !defined (_WIO_DEFINED)
 #if defined (__MSVCRT__)
-int	 _waccess (const wchar_t*, int);
-int	_wchmod (const wchar_t*, int);
-int	_wcreat (const wchar_t*, int);
-long	_wfindfirst (const wchar_t*, struct _wfinddata_t *);
-int	_wfindnext (long, struct _wfinddata_t *);
-int	_wunlink (const wchar_t*);
-int	_wopen (const wchar_t*, int, ...);
-int	_wsopen (const wchar_t*, int, int, ...);
-wchar_t* _wmktemp (wchar_t*);
-long	_wfindfirsti64 (const wchar_t*, struct _wfinddatai64_t*);
-int 	_wfindnexti64 (long, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl	 _waccess (const wchar_t*, int);
+_CRTIMP int __cdecl	_wchmod (const wchar_t*, int);
+_CRTIMP int __cdecl	_wcreat (const wchar_t*, int);
+_CRTIMP long __cdecl	_wfindfirst (const wchar_t*, struct _wfinddata_t *);
+_CRTIMP int __cdecl	_wfindnext (long, struct _wfinddata_t *);
+_CRTIMP int __cdecl	_wunlink (const wchar_t*);
+_CRTIMP int __cdecl	_wopen (const wchar_t*, int, ...);
+_CRTIMP int __cdecl	_wsopen (const wchar_t*, int, int, ...);
+_CRTIMP wchar_t* __cdecl _wmktemp (wchar_t*);
+_CRTIMP long __cdecl	_wfindfirsti64 (const wchar_t*, struct _wfinddatai64_t*);
+_CRTIMP int __cdecl 	_wfindnexti64 (long, struct _wfinddatai64_t*);
 #endif /* defined (__MSVCRT__) */
 #define _WIO_DEFINED
 #endif /* _WIO_DEFINED */
 
 #ifndef _WSTDIO_DEFINED
 /* also in stdio.h - keep in sync */
-int	fwprintf (FILE*, const wchar_t*, ...);
-int	wprintf (const wchar_t*, ...);
-int	swprintf (wchar_t*, const wchar_t*, ...);
-int	_snwprintf (wchar_t*, size_t, const wchar_t*, ...);
-int	vfwprintf (FILE*, const wchar_t*, va_list);
-int	vwprintf (const wchar_t*, va_list);
-int	vswprintf (wchar_t*, const wchar_t*, va_list);
-int	_vsnwprintf (wchar_t*, size_t, const wchar_t*, va_list);
-int	fwscanf (FILE*, const wchar_t*, ...);
-int	wscanf (const wchar_t*, ...);
-int	swscanf (const wchar_t*, const wchar_t*, ...);
-wint_t	fgetwc (FILE*);
-wint_t	fputwc (wchar_t, FILE*);
-wint_t	ungetwc (wchar_t, FILE*);
+_CRTIMP int __cdecl	fwprintf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl	wprintf (const wchar_t*, ...);
+_CRTIMP int __cdecl	swprintf (wchar_t*, const wchar_t*, ...);
+_CRTIMP int __cdecl	_snwprintf (wchar_t*, size_t, const wchar_t*, ...);
+_CRTIMP int __cdecl	vfwprintf (FILE*, const wchar_t*, __VA_LIST);
+_CRTIMP int __cdecl	vwprintf (const wchar_t*, __VA_LIST);
+_CRTIMP int __cdecl	vswprintf (wchar_t*, const wchar_t*, __VA_LIST);
+_CRTIMP int __cdecl	_vsnwprintf (wchar_t*, size_t, const wchar_t*, __VA_LIST);
+_CRTIMP int __cdecl	fwscanf (FILE*, const wchar_t*, ...);
+_CRTIMP int __cdecl	wscanf (const wchar_t*, ...);
+_CRTIMP int __cdecl	swscanf (const wchar_t*, const wchar_t*, ...);
+_CRTIMP wint_t __cdecl	fgetwc (FILE*);
+_CRTIMP wint_t __cdecl	fputwc (wchar_t, FILE*);
+_CRTIMP wint_t __cdecl	ungetwc (wchar_t, FILE*);
 
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
-int snwprintf(wchar_t* s, size_t n, const wchar_t*  format, ...);
-extern __inline__ int vsnwprintf (wchar_t* s, size_t n, const wchar_t* format,
-			   va_list arg)
+int __cdecl snwprintf(wchar_t* s, size_t n, const wchar_t*  format, ...);
+extern __inline__ int __cdecl vsnwprintf (wchar_t* s, size_t n, const wchar_t* format,
+			   __VA_LIST arg)
   { return _vsnwprintf ( s, n, format, arg); }
 #endif
 
 #ifdef __MSVCRT__ 
-wchar_t* fgetws (wchar_t*, int, FILE*);
-int	fputws (const wchar_t*, FILE*);
-wint_t	getwc (FILE*);
-wint_t  getwchar (void);
-wchar_t* _getws (wchar_t*);
-wint_t	putwc (wint_t, FILE*);
-int	_putws (const wchar_t*);
-wint_t	putwchar (wint_t);
-FILE*	_wfdopen(int, wchar_t *);
-FILE*	_wfopen (const wchar_t*, const wchar_t*);
-FILE*	_wfreopen (const wchar_t*, const wchar_t*, FILE*);
-FILE*   _wfsopen (const wchar_t*, const wchar_t*, int);
-wchar_t* _wtmpnam (wchar_t*);
-wchar_t* _wtempnam (const wchar_t*, const wchar_t*);
-int 	_wrename (const wchar_t*, const wchar_t*);
-int	_wremove (const wchar_t*)
+_CRTIMP wchar_t* __cdecl fgetws (wchar_t*, int, FILE*);
+_CRTIMP int __cdecl	fputws (const wchar_t*, FILE*);
+_CRTIMP wint_t __cdecl	getwc (FILE*);
+_CRTIMP wint_t __cdecl  getwchar (void);
+_CRTIMP wchar_t* __cdecl _getws (wchar_t*);
+_CRTIMP wint_t __cdecl	putwc (wint_t, FILE*);
+_CRTIMP int __cdecl	_putws (const wchar_t*);
+_CRTIMP wint_t __cdecl	putwchar (wint_t);
+_CRTIMP FILE* __cdecl	_wfdopen(int, wchar_t *);
+_CRTIMP FILE* __cdecl	_wfopen (const wchar_t*, const wchar_t*);
+_CRTIMP FILE* __cdecl	_wfreopen (const wchar_t*, const wchar_t*, FILE*);
+_CRTIMP FILE* __cdecl   _wfsopen (const wchar_t*, const wchar_t*, int);
+_CRTIMP wchar_t* __cdecl _wtmpnam (wchar_t*);
+_CRTIMP wchar_t* __cdecl _wtempnam (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	_wrename (const wchar_t*, const wchar_t*);
+_CRTIMP int __cdecl	_wremove (const wchar_t*)
 
-FILE*	  _wpopen (const wchar_t*, const wchar_t*)
-void	  _wperror (const wchar_t*);
+_CRTIMP FILE* __cdecl	_wpopen (const wchar_t*, const wchar_t*)
+_CRTIMP void __cdecl	_wperror (const wchar_t*);
 #endif	/* __MSVCRT__ */
 #define _WSTDIO_DEFINED
 #endif /* _WSTDIO_DEFINED */
@@ -151,11 +151,11 @@ void	  _wperror (const wchar_t*);
 #ifndef _WDIRECT_DEFINED
 /* Also in direct.h */
 #ifdef __MSVCRT__ 
-int	  _wchdir (const wchar_t*);
-wchar_t*  _wgetcwd (wchar_t*, int);
-wchar_t*  _wgetdcwd (int, wchar_t*, int);
-int	  _wmkdir (const wchar_t*);
-int	  _wrmdir (const wchar_t*);
+_CRTIMP int __cdecl	  _wchdir (const wchar_t*);
+_CRTIMP wchar_t* __cdecl  _wgetcwd (wchar_t*, int);
+_CRTIMP wchar_t* __cdecl  _wgetdcwd (int, wchar_t*, int);
+_CRTIMP int __cdecl	  _wmkdir (const wchar_t*);
+_CRTIMP int __cdecl	  _wrmdir (const wchar_t*);
 #endif	/* __MSVCRT__ */
 #define _WDIRECT_DEFINED
 #endif /* _WDIRECT_DEFINED */
@@ -220,8 +220,8 @@ struct _stati64 {
 #if !defined ( _WSTAT_DEFINED)
 /* also declared in sys/stat.h */
 #if defined __MSVCRT__
-int	_wstat (const wchar_t*, struct _stat*);
-int	_wstati64 (const wchar_t*, struct _stati64*);
+_CRTIMP int __cdecl	_wstat (const wchar_t*, struct _stat*);
+_CRTIMP int __cdecl	_wstati64 (const wchar_t*, struct _stati64*);
 #endif  /* __MSVCRT__ */
 #define _WSTAT_DEFINED
 #endif /* ! _WSTAT_DEFIND  */
@@ -229,28 +229,28 @@ int	_wstati64 (const wchar_t*, struct _stati64*);
 #ifndef _WTIME_DEFINED
 #ifdef __MSVCRT__
 /* wide function prototypes, also declared in time.h */
-wchar_t*	_wasctime (const struct tm*);
-wchar_t*	_wctime (const time_t*);
-wchar_t*	_wstrdate (wchar_t*);
-wchar_t*	_wstrtime (wchar_t*);
+_CRTIMP wchar_t* __cdecl	_wasctime (const struct tm*);
+_CRTIMP wchar_t* __cdecl	_wctime (const time_t*);
+_CRTIMP wchar_t* __cdecl	_wstrdate (wchar_t*);
+_CRTIMP wchar_t* __cdecl	_wstrtime (wchar_t*);
 #endif /* __MSVCRT__ */
-size_t		wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
+_CRTIMP size_t __cdecl		wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
 #define _WTIME_DEFINED
 #endif /* _WTIME_DEFINED */ 
 
 #ifndef _WLOCALE_DEFINED  /* also declared in locale.h */
-wchar_t* _wsetlocale (int, const wchar_t*);
+_CRTIMP wchar_t* __cdecl _wsetlocale (int, const wchar_t*);
 #define _WLOCALE_DEFINED
 #endif
 
 #ifndef _WSTDLIB_DEFINED /* also declared in stdlib.h */
-long	wcstol	(const wchar_t*, wchar_t**, int);
-unsigned long	wcstoul (const wchar_t*, wchar_t**, int);
-double	wcstod	(const wchar_t*, wchar_t**);
+_CRTIMP long __cdecl 		wcstol (const wchar_t*, wchar_t**, int);
+_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 wcstof( const wchar_t *nptr, wchar_t **endptr)
+extern __inline__ float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr)
 {  return (wcstod(nptr, endptr)); }
-long double wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
+long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
 #endif /* __NO_ISOCEXT */
 #define  _WSTDLIB_DEFINED
 #endif
@@ -261,17 +261,17 @@ long double wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
 /* Wide character versions. Also declared in io.h. */
 /* CHECK: Are these in the oldnames???  NO! */
 #if (0)
-int		waccess (const wchar_t *, int);
-int		wchmod (const wchar_t *, int);
-int		wcreat (const wchar_t *, int);
-long		wfindfirst (wchar_t *, struct _wfinddata_t *);
-int		wfindnext (long, struct _wfinddata_t *);
-int		wunlink (const wchar_t *);
-int		wrename (const wchar_t *, const wchar_t *);
-int		wremove (const wchar_t *);
-int		wopen (const wchar_t *, int, ...);
-int		wsopen (const wchar_t *, int, int, ...);
-wchar_t*	wmktemp (wchar_t *);
+int 		waccess (const wchar_t *, int);
+int 		wchmod (const wchar_t *, int);
+int 		wcreat (const wchar_t *, int);
+long 		wfindfirst (wchar_t *, struct _wfinddata_t *);
+int 		wfindnext (long, struct _wfinddata_t *);
+int 		wunlink (const wchar_t *);
+int 		wrename (const wchar_t *, const wchar_t *);
+int 		wremove (const wchar_t *);
+int 		wopen (const wchar_t *, int, ...);
+int 		wsopen (const wchar_t *, int, int, ...);
+wchar_t* 	wmktemp (wchar_t *);
 #endif
 #endif /* _NO_OLDNAMES */
 
@@ -283,29 +283,28 @@ wchar_t*	wmktemp (wchar_t *);
 typedef int mbstate_t;
 typedef wchar_t _Wint_t;
 
-wint_t  btowc(int);
-size_t  mbrlen(const char *, size_t, mbstate_t *);
-size_t  mbrtowc(wchar_t *, const char *, size_t, mbstate_t *);
-size_t  mbsrtowcs(wchar_t *, const char **, size_t, mbstate_t *);
+wint_t __cdecl btowc(int);
+size_t __cdecl mbrlen(const char *, size_t, mbstate_t *);
+size_t __cdecl mbrtowc(wchar_t *, const char *, size_t, mbstate_t *);
+size_t __cdecl mbsrtowcs(wchar_t *, const char **, size_t, mbstate_t *);
 
-size_t  wcrtomb(char *, wchar_t, mbstate_t *);
-size_t  wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
-int  	wctob(wint_t);
+size_t __cdecl wcrtomb(char *, wchar_t, mbstate_t *);
+size_t __cdecl wcsrtombs(char *, const wchar_t **, size_t, mbstate_t *);
+int __cdecl wctob(wint_t);
 
 #ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
-extern __inline__ int fwide(FILE* stream, int mode) {return -1;} /* limited to byte orientation */ 
-extern __inline__ int mbsinit(const mbstate_t* ps) {return 1;}
-wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
-wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
+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;}
+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);
-wchar_t* wmemcpy(wchar_t* __restrict__ s1, const wchar_t* __restrict__ s2,
+wchar_t* __cdecl wmemcpy(wchar_t* __restrict__ s1, const wchar_t* __restrict__ s2,
 		 size_t n);
-wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
-long long wcstoll(const wchar_t* __restrict__ nptr,
+wchar_t* __cdecl wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
+long long __cdecl wcstoll(const wchar_t* __restrict__ nptr,
 		  wchar_t** __restrict__ endptr, int base);
-unsigned long long wcstoull(const wchar_t* __restrict__ nptr,
+unsigned long long __cdecl wcstoull(const wchar_t* __restrict__ nptr,
 			    wchar_t ** __restrict__ endptr, int base);
-
 #endif /* __NO_ISOCEXT */
 
 
diff --git a/winsup/mingw/include/wctype.h b/winsup/mingw/include/wctype.h
index 858981b69..2f7a62e1c 100644
--- a/winsup/mingw/include/wctype.h
+++ b/winsup/mingw/include/wctype.h
@@ -64,25 +64,25 @@ typedef wchar_t wctype_t;
 #endif
 
 /* Wide character equivalents - also in ctype.h */
-int	iswalnum(wint_t);
-int	iswalpha(wint_t);
-int	iswascii(wint_t);
-int	iswcntrl(wint_t);
-int	iswctype(wint_t, wctype_t);
-int	is_wctype(wint_t, wctype_t);	/* Obsolete! */
-int	iswdigit(wint_t);
-int	iswgraph(wint_t);
-int	iswlower(wint_t);
-int	iswprint(wint_t);
-int	iswpunct(wint_t);
-int	iswspace(wint_t);
-int	iswupper(wint_t);
-int	iswxdigit(wint_t);
+_CRTIMP int __cdecl	iswalnum(wint_t);
+_CRTIMP int __cdecl	iswalpha(wint_t);
+_CRTIMP int __cdecl	iswascii(wint_t);
+_CRTIMP int __cdecl	iswcntrl(wint_t);
+_CRTIMP int __cdecl	iswctype(wint_t, wctype_t);
+_CRTIMP int __cdecl	is_wctype(wint_t, wctype_t);	/* Obsolete! */
+_CRTIMP int __cdecl	iswdigit(wint_t);
+_CRTIMP int __cdecl	iswgraph(wint_t);
+_CRTIMP int __cdecl	iswlower(wint_t);
+_CRTIMP int __cdecl	iswprint(wint_t);
+_CRTIMP int __cdecl	iswpunct(wint_t);
+_CRTIMP int __cdecl	iswspace(wint_t);
+_CRTIMP int __cdecl	iswupper(wint_t);
+_CRTIMP int __cdecl	iswxdigit(wint_t);
 
-wchar_t	towlower(wchar_t);
-wchar_t	towupper(wchar_t);
+_CRTIMP wchar_t __cdecl	towlower(wchar_t);
+_CRTIMP wchar_t __cdecl	towupper(wchar_t);
 
-int	isleadbyte (int);
+_CRTIMP int __cdecl	isleadbyte (int);
 
 /* Also in ctype.h */
 
@@ -108,28 +108,29 @@ extern unsigned short** _imp___ctype;
 #endif		/*  __DECLSPEC_SUPPORTED */
 
 
-#if !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED))
+#if !(defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \
+      || defined(__WCTYPE_INLINES_DEFINED))
 #define __WCTYPE_INLINES_DEFINED
-extern __inline__ int iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));}
-extern __inline__ int iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));}
-extern __inline__ int iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);}
-extern __inline__ int iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));}
-extern __inline__ int iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));}
-extern __inline__ int iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int iswlower(wint_t wc) {return (iswctype(wc,_LOWER));}
-extern __inline__ int iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));}
-extern __inline__ int iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));}
-extern __inline__ int iswspace(wint_t wc) {return (iswctype(wc,_SPACE));}
-extern __inline__ int iswupper(wint_t wc) {return (iswctype(wc,_UPPER));}
-extern __inline__ int iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));}
-extern __inline__ int isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);}
+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);}
 #endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */
 
 
 typedef wchar_t wctrans_t;
-wint_t 		towctrans(wint_t, wctrans_t);
-wctrans_t	wctrans(const char*);
-wctype_t	wctype(const char*);
+_CRTIMP wint_t __cdecl		towctrans(wint_t, wctrans_t);
+_CRTIMP wctrans_t __cdecl	wctrans(const char*);
+_CRTIMP wctype_t __cdecl	wctype(const char*);
 
 #ifdef __cplusplus
 }