X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=platform%2Fwin32%2Ffunctions%2F_PDCLIB%2F_PDCLIB_seek.c;h=e23cd3cbaf5af4ac71910663085487ca0f9d0fa7;hb=b51005d0cdc8e592a7064a12f42a41b5d843fd94;hp=c4c25f87b281829627a943d006101b6f51c5352d;hpb=5fd032eae66fba700cb9927840222b068c62361e;p=pdclib diff --git a/platform/win32/functions/_PDCLIB/_PDCLIB_seek.c b/platform/win32/functions/_PDCLIB/_PDCLIB_seek.c index c4c25f8..e23cd3c 100644 --- a/platform/win32/functions/_PDCLIB/_PDCLIB_seek.c +++ b/platform/win32/functions/_PDCLIB/_PDCLIB_seek.c @@ -10,11 +10,28 @@ #include #ifndef REGTEST #include <_PDCLIB_glue.h> +#include +_Static_assert(SEEK_SET == FILE_BEGIN, "SEEK_SET is incorrect"); +_Static_assert(SEEK_CUR == FILE_CURRENT, "SEEK_CUR is incorrect"); +_Static_assert(SEEK_END == FILE_END, "SEEK_END is incorrect"); + +extern void _PDCLIB_w32errno( void ); _PDCLIB_int64_t _PDCLIB_seek( struct _PDCLIB_file_t * stream, _PDCLIB_int64_t offset, int whence ) { - errno = ENOTSUP; - return EOF; + LARGE_INTEGER liOffset; + liOffset.QuadPart = offset; + BOOL rv = SetFilePointerEx( stream->handle, liOffset, &liOffset, whence ); + if(!rv) { + _PDCLIB_w32errno(); + return EOF; + } + + stream->ungetidx = 0; + stream->bufidx = 0; + stream->bufend = 0; + stream->pos.offset = liOffset.QuadPart; + return liOffset.QuadPart; } #endif