mirror of
https://github.com/ziglang/zig.git
synced 2025-12-08 23:33:07 +00:00
* Added fseeki64.c from mingw-w64 9.0.0. This file was missing in Zig distribution. This file contains implementation for _fseeki64 and _ftelli64 functions.
51 lines
1.3 KiB
C
Vendored
51 lines
1.3 KiB
C
Vendored
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
#include <stdio.h>
|
|
#include <io.h>
|
|
#include <errno.h>
|
|
|
|
#if !defined(__arm__) && !defined(__aarch64__) /* we have F_ARM_ANY(_fseeki64) in msvcrt.def.in */
|
|
int __cdecl _fseeki64(FILE* stream, __int64 offset, int whence)
|
|
{
|
|
fpos_t pos;
|
|
if (whence == SEEK_CUR)
|
|
{
|
|
/* If stream is invalid, fgetpos sets errno. */
|
|
if (fgetpos (stream, &pos))
|
|
return (-1);
|
|
pos += (fpos_t) offset;
|
|
}
|
|
else if (whence == SEEK_END)
|
|
{
|
|
/* If writing, we need to flush before getting file length. */
|
|
fflush (stream);
|
|
pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset);
|
|
}
|
|
else if (whence == SEEK_SET)
|
|
pos = (fpos_t) offset;
|
|
else
|
|
{
|
|
errno = EINVAL;
|
|
return (-1);
|
|
}
|
|
return fsetpos (stream, &pos);
|
|
}
|
|
|
|
int __cdecl (*__MINGW_IMP_SYMBOL(_fseeki64))(FILE*, __int64, int) = _fseeki64;
|
|
#endif /* !defined(__arm__) && !defined(__aarch64__) */
|
|
|
|
__int64 __cdecl _ftelli64(FILE* stream)
|
|
{
|
|
fpos_t pos;
|
|
if (fgetpos (stream, &pos))
|
|
return -1LL;
|
|
else
|
|
return (__int64) pos;
|
|
}
|
|
|
|
__int64 __cdecl (*__MINGW_IMP_SYMBOL(_ftelli64))(FILE*) = _ftelli64;
|
|
|