From a855d6202536ff28e5aae4f22a0f31d8f5b325d0 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sat, 21 Jan 2017 15:18:31 -0500 Subject: Port of Duke Nukem 3D This ports Fabien Sanglard's Chocolate Duke to run on a version of SDL for Rockbox. Change-Id: I8f2c4c78af19de10c1633ed7bb7a997b43256dd9 --- apps/plugins/lib/stdio_compat.c | 50 ++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 11 deletions(-) (limited to 'apps/plugins/lib/stdio_compat.c') diff --git a/apps/plugins/lib/stdio_compat.c b/apps/plugins/lib/stdio_compat.c index d2b8f9bbc7..957dd0ddc1 100644 --- a/apps/plugins/lib/stdio_compat.c +++ b/apps/plugins/lib/stdio_compat.c @@ -20,12 +20,16 @@ #include "plugin.h" #include "stdio_compat.h" +#include "errno.h" static _FILE_ __file__[MAX_STDIO_FILES] = { {-1,-1,0},{-1,-1,0},{-1,-1,0},{-1,-1,0}, - {-1,-1,0},{-1,-1,0},{-1,-1,0},{-1,-1,0} + {-1,-1,0},{-1,-1,0},{-1,-1,0},{-1,-1,0}, + {-1,-1,0},{-1,-1,0},{-1,-1,0} }; +_FILE_ *_stdout_ = NULL, *_stderr_ = NULL; + _FILE_ *_fopen_(const char *path, const char *mode) { _FILE_ *f = __file__; @@ -34,13 +38,16 @@ _FILE_ *_fopen_(const char *path, const char *mode) int i; /* look for free slot */ - for (i=0; ifd == -1) break; /* no empty slots */ if (i == MAX_STDIO_FILES) + { + rb->splash(HZ, "no open slots"); return NULL; + } if (*mode != 'r') { @@ -72,10 +79,14 @@ _FILE_ *_fopen_(const char *path, const char *mode) } - fd = rb->open(path, flags); + fd = rb->open(path, flags, 0666); - if (fd == -1) + if (fd < 0) + { + //extern int errno; + //rb->splashf(HZ*2, "open of %s failed (%d)", path, errno); return NULL; + } /* initialize */ f->fd = fd; @@ -97,23 +108,40 @@ size_t _fread_(void *ptr, size_t size, size_t nmemb, _FILE_ *stream) if (ret < (ssize_t)(size*nmemb)) stream->error = -1; - - return ret; + return ret / size; } size_t _fwrite_(const void *ptr, size_t size, size_t nmemb, _FILE_ *stream) { - ssize_t ret = rb->write(stream->fd, ptr, size*nmemb); + if(stream) + { + ssize_t ret = rb->write(stream->fd, ptr, size*nmemb); - if (ret < (ssize_t)(size*nmemb)) - stream->error = -1; + if (ret < (ssize_t)(size*nmemb)) + stream->error = -1; - return ret; + return ret / size; + } +#if 1 + else + { + char buf[10]; + rb->snprintf(buf, 10, "%%%ds", size*nmemb); + rb->splashf(HZ, buf, ptr); + return size * nmemb; + } +#endif } int _fseek_(_FILE_ *stream, long offset, int whence) { - return rb->lseek(stream->fd, offset, whence); + if(rb->lseek(stream->fd, offset, whence) >= 0) + return 0; + else + { + rb->splashf(HZ, "lseek() failed: %d fd:%d", errno, stream->fd); + return -1; + } } long _ftell_(_FILE_ *stream) -- cgit v1.2.3