#include <windows.h>
#include <malloc.h>
#include <errno.h>
#include <msvcrt.h>
#include <io.h>

static errno_t __cdecl _int_umask_s (int, int *);
static errno_t __cdecl _stub (int, int *);

errno_t __cdecl (*__MINGW_IMP_SYMBOL(_umask_s))(int, int *) = 
 _stub;

static errno_t __cdecl
_stub (int m, int *pold)
{
  errno_t __cdecl (*f)(int, int *) = __MINGW_IMP_SYMBOL(_umask_s);

  if (f == _stub)
    {
	f = (void*)
	    GetProcAddress (__mingw_get_msvcrt_handle (), "_umask_s");
	if (!f)
	  f = _int_umask_s;
	__MINGW_IMP_SYMBOL(_umask_s) = f;
    }
  return (*f)(m, pold);
}

errno_t __cdecl
_umask_s (int m, int *pold)
{
  return _stub (m, pold);
}

static errno_t __cdecl
_int_umask_s (int m, int *pold)
{
  if (!pold)
     {
        errno = EINVAL;
	return EINVAL;
     }
  *pold = _umask (m);
  return 0;
}
