From a9ed990c9b2bde52318589436fdea568d7f7a57e Mon Sep 17 00:00:00 2001 From: Alberto Fustinoni Date: Wed, 6 Sep 2017 11:34:00 +0900 Subject: [PATCH] Updated filestream --- include/streams/file_stream.h | 8 ++++++ include/streams/file_stream_transforms.h | 21 +++++++++++++--- streams/file_stream.c | 27 ++++++++++++++++++++ streams/file_stream_transforms.c | 32 +++++++++++++++++++++++- 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/include/streams/file_stream.h b/include/streams/file_stream.h index 40b867b..5e6298d 100644 --- a/include/streams/file_stream.h +++ b/include/streams/file_stream.h @@ -31,6 +31,8 @@ #include #include +#include + RETRO_BEGIN_DECLS typedef struct RFILE RFILE; @@ -81,6 +83,12 @@ bool filestream_write_file(const char *path, const void *data, ssize_t size); int filestream_putc(RFILE *stream, int c); +int filestream_vprintf(RFILE *stream, const char* format, va_list args); + +int filestream_printf(RFILE *stream, const char* format, ...); + +int filestream_error(RFILE *stream); + int filestream_get_fd(RFILE *stream); int filestream_flush(RFILE *stream); diff --git a/include/streams/file_stream_transforms.h b/include/streams/file_stream_transforms.h index 8921051..81ff689 100644 --- a/include/streams/file_stream_transforms.h +++ b/include/streams/file_stream_transforms.h @@ -24,12 +24,12 @@ #define __LIBRETRO_SDK_FILE_STREAM_TRANSFORMS_H #include - -#include #include RETRO_BEGIN_DECLS +typedef struct RFILE RFILE; + #define FILE RFILE #define fopen rfopen @@ -38,9 +38,14 @@ RETRO_BEGIN_DECLS #define fseek rfseek #define fread rfread #define fgets rfgets +#define fgetc rfgetc #define fwrite rfwrite +#define fputc rfputc +#define fprintf rfprintf +#define ferror rferror +#define feof rfeof -RFILE* rfopen(const char *path, char *mode); +RFILE* rfopen(const char *path, const char *mode); int rfclose(RFILE* stream); @@ -53,9 +58,19 @@ size_t rfread(void* buffer, char *rfgets(char *buffer, int maxCount, RFILE* stream); +int rfgetc(RFILE* stream); + size_t rfwrite(void const* buffer, size_t elementSize, size_t elementCount, RFILE* stream); +int rfputc(int character, RFILE * stream); + +int rfprintf(RFILE * stream, const char * format, ...); + +int rferror(RFILE* stream); + +int rfeof(RFILE* stream); + RETRO_END_DECLS #endif diff --git a/streams/file_stream.c b/streams/file_stream.c index 4663553..e1d08fe 100644 --- a/streams/file_stream.c +++ b/streams/file_stream.c @@ -529,6 +529,33 @@ int filestream_putc(RFILE *stream, int c) #endif } +int filestream_vprintf(RFILE *stream, const char* format, va_list args) +{ + static char buffer[8 * 1024]; + int numChars = vsprintf(buffer, format, args); + + if (numChars < 0) + return -1; + else if (numChars == 0) + return 0; + + return filestream_write(stream, buffer, numChars); +} + +int filestream_printf(RFILE *stream, const char* format, ...) +{ + va_list vl; + va_start(vl, format); + int result = filestream_vprintf(stream, format, vl); + va_end(vl); + return result; +} + +int filestream_error(RFILE *stream) +{ + return ferror(stream->fp); +} + int filestream_close(RFILE *stream) { if (!stream) diff --git a/streams/file_stream_transforms.c b/streams/file_stream_transforms.c index f43ee7b..0b16848 100644 --- a/streams/file_stream_transforms.c +++ b/streams/file_stream_transforms.c @@ -22,8 +22,9 @@ #include #include +#include -RFILE* rfopen(const char *path, char *mode) +RFILE* rfopen(const char *path, const char *mode) { unsigned int retro_mode = RFILE_MODE_READ_TEXT; if (strstr(mode, "r")) @@ -64,8 +65,37 @@ char *rfgets(char *buffer, int maxCount, RFILE* stream) return filestream_gets(stream, buffer, maxCount); } +int rfgetc(RFILE* stream) +{ + return filestream_getc(stream); +} + size_t rfwrite(void const* buffer, size_t elementSize, size_t elementCount, RFILE* stream) { return filestream_write(stream, buffer, elementSize*elementCount); } + +int rfputc(int character, RFILE * stream) +{ + return filestream_putc(stream, character); +} + +int rfprintf(RFILE * stream, const char * format, ...) +{ + va_list vl; + va_start(vl, format); + int result = filestream_vprintf(stream, format, vl); + va_end(vl); + return result; +} + +int rferror(RFILE* stream) +{ + return filestream_error(stream); +} + +int rfeof(RFILE* stream) +{ + return filestream_eof(stream); +}