]> pd.if.org Git - pdclib.old/blobdiff - platform/gandr/functions/stdio/_PDCLIB_fileops.c
Initial stab at gandr platform
[pdclib.old] / platform / gandr / functions / stdio / _PDCLIB_fileops.c
diff --git a/platform/gandr/functions/stdio/_PDCLIB_fileops.c b/platform/gandr/functions/stdio/_PDCLIB_fileops.c
new file mode 100644 (file)
index 0000000..9dff0ce
--- /dev/null
@@ -0,0 +1,61 @@
+/* _PDCLIB_fileops
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef REGTEST
+#include <stdio.h>
+#include <stdint.h>
+#include <_PDCLIB_glue.h>
+#include <errno.h>
+#include <gd_bal.h>
+
+static bool readf( _PDCLIB_fd_t fd, void * buf, size_t length, 
+                   size_t * numBytesRead )
+{
+    int rv = gd_read(fd.pointer, buf, length, numBytesRead );
+
+    return rv >= 0;
+}
+
+static bool writef( _PDCLIB_fd_t fd, const void * buf, size_t length, 
+                   size_t * numBytesWritten )
+{
+    int rv = gd_write(fd.pointer, buf, length, numBytesWritten );
+
+    return rv >= 0;
+}
+
+static bool seekf( _PDCLIB_fd_t fd, int_fast64_t offset, int whence,
+    int_fast64_t* newPos )
+{
+    int rv = gd_seek( fd.pointer, offset, whence, &newPos );
+
+    return rv >= 0;
+}
+
+static void closef( _PDCLIB_fd_t self )
+{
+    gd_close( self.pointer );
+}
+
+const _PDCLIB_fileops_t _PDCLIB_fileops = {
+    .read  = readf,
+    .write = writef,
+    .seek  = seekf,
+    .close = closef,
+};
+
+#endif
+
+#ifdef TEST
+#include <_PDCLIB_test.h>
+
+int main( void )
+{
+    // Tested by stdio test cases
+    return TEST_RESULTS;
+}
+
+#endif