]> pd.if.org Git - pdclib.old/blobdiff - platform/posix/functions/_PDCLIB/seek.c
* platform/example is now a "stub" platform - it should compile anywhere, but
[pdclib.old] / platform / posix / functions / _PDCLIB / seek.c
diff --git a/platform/posix/functions/_PDCLIB/seek.c b/platform/posix/functions/_PDCLIB/seek.c
new file mode 100644 (file)
index 0000000..755abe2
--- /dev/null
@@ -0,0 +1,73 @@
+/* $Id$ */
+
+/* int64_t _PDCLIB_seek( FILE *, int64_t, int )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <stdio.h>
+
+#ifndef _PDCLIB_GLUE_H
+#define _PDCLIB_GLUE_H
+#include <_PDCLIB_glue.h>
+#endif
+
+#include "/usr/include/errno.h"
+
+extern _PDCLIB_int64_t lseek64( int fd, _PDCLIB_int64_t offset, int whence );
+
+_PDCLIB_int64_t _PDCLIB_seek( struct _PDCLIB_file_t * stream, _PDCLIB_int64_t offset, int whence )
+{
+    switch ( whence )
+    {
+        case SEEK_SET:
+        case SEEK_CUR:
+        case SEEK_END:
+            /* EMPTY - OK */
+            break;
+        default:
+            /* See comments on implementation-defined errno values in
+               <_PDCLIB_config.h>.
+            */
+            _PDCLIB_errno = _PDCLIB_ERROR;
+            return EOF;
+            break;
+    }
+    _PDCLIB_int64_t rc = lseek64( stream->handle, offset, whence );
+    if ( rc != EOF )
+    {
+        stream->ungetidx = 0;
+        stream->bufidx = 0;
+        stream->bufend = 0;
+        stream->pos.offset = rc;
+        return rc;
+    }
+    switch ( errno )
+    {
+        case EBADF:
+        case EFAULT:
+            /* See comments on implementation-defined errno values in
+               <_PDCLIB_config.h>.
+            */
+            _PDCLIB_errno = _PDCLIB_ERROR;
+            break;
+        default:
+            /* This should be something like EUNKNOWN. */
+            _PDCLIB_errno = _PDCLIB_ERROR;
+            break;
+    }
+    return EOF;
+}
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+int main( void )
+{
+    /* Testing covered by ftell.c */
+    return TEST_RESULTS;
+}
+
+#endif
+