2004-06-30 12:51:18 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <io.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
int __cdecl
|
|
|
|
fseeko64 (FILE* stream, off64_t 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)
|
2005-08-25 10:04:59 +08:00
|
|
|
{
|
|
|
|
/* If writing, we need to flush before getting file length. */
|
|
|
|
fflush (stream);
|
|
|
|
pos = (fpos_t) (_filelengthi64 (_fileno (stream)) + offset);
|
|
|
|
}
|
2004-06-30 12:51:18 +08:00
|
|
|
else if (whence == SEEK_SET)
|
|
|
|
pos = (fpos_t) offset;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
errno = EINVAL;
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
return fsetpos (stream, &pos);
|
|
|
|
}
|