47 lines
965 B
C
47 lines
965 B
C
|
#include <windows.h>
|
||
|
#include <malloc.h>
|
||
|
#include <errno.h>
|
||
|
#include <msvcrt.h>
|
||
|
#include <io.h>
|
||
|
|
||
|
static errno_t __cdecl _int_chsize_s (int, long long);
|
||
|
static errno_t __cdecl _stub (int, long long);
|
||
|
|
||
|
errno_t __cdecl (*__MINGW_IMP_SYMBOL(_chsize_s))(int, long long) =
|
||
|
_stub;
|
||
|
|
||
|
static errno_t __cdecl
|
||
|
_stub (int fd, long long sz)
|
||
|
{
|
||
|
errno_t __cdecl (*f)(int, long long) = __MINGW_IMP_SYMBOL(_chsize_s);
|
||
|
|
||
|
if (f == _stub)
|
||
|
{
|
||
|
f = (errno_t __cdecl (*)(int, long long))
|
||
|
GetProcAddress (__mingw_get_msvcrt_handle (), "_chsize_s");
|
||
|
if (!f)
|
||
|
f = _int_chsize_s;
|
||
|
__MINGW_IMP_SYMBOL(_chsize_s) = f;
|
||
|
}
|
||
|
return (*f)(fd, sz);
|
||
|
}
|
||
|
|
||
|
errno_t __cdecl
|
||
|
_chsize_s (int fd, long long sz)
|
||
|
{
|
||
|
return _stub (fd, sz);
|
||
|
}
|
||
|
|
||
|
static errno_t __cdecl
|
||
|
_int_chsize_s (int fd, long long sz)
|
||
|
{
|
||
|
if (sz > 0x7fffffffll)
|
||
|
{
|
||
|
/* We can't set file bigger as 2GB, so return EACCES. */
|
||
|
return (errno = EACCES);
|
||
|
}
|
||
|
if (!_chsize (fd, sz))
|
||
|
return 0;
|
||
|
return errno;
|
||
|
}
|