]> pd.if.org Git - pdclib/blobdiff - platform/win32/functions/_PDCLIB/_PDCLIB_seek.c
Enable building PDCLib with Watcom. This was surprisingly painless: their C99 mode...
[pdclib] / platform / win32 / functions / _PDCLIB / _PDCLIB_seek.c
index c4c25f87b281829627a943d006101b6f51c5352d..6bf53e9809780562e136cd94f83b5dcfe28c54cc 100644 (file)
 #include <errno.h>
 #ifndef REGTEST
 #include <_PDCLIB_glue.h>
+#include <windows.h>
 
+#if _PDCLIB_C_MIN(2011)
+_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");
+#endif
+
+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