From f51e0f62e514851e73e1879d9cbe78fb6bfdd988 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 7 Apr 2016 02:21:43 +0200 Subject: [PATCH] Add intfstream_seek --- .../include/streams/interface_stream.h | 3 +++ libretro-common/streams/interface_stream.c | 25 ++++++++++++++++--- libretro-common/streams/memory_stream.c | 3 ++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/libretro-common/include/streams/interface_stream.h b/libretro-common/include/streams/interface_stream.h index 291fb43f75..f2518a3f15 100644 --- a/libretro-common/include/streams/interface_stream.h +++ b/libretro-common/include/streams/interface_stream.h @@ -67,4 +67,7 @@ char *intfstream_gets(intfstream_internal_t *intf, int intfstream_getc(intfstream_internal_t *intf); +int intfstream_seek(intfstream_internal_t *intf, + int offset, int whence); + #endif diff --git a/libretro-common/streams/interface_stream.c b/libretro-common/streams/interface_stream.c index ac397273df..21621af9eb 100644 --- a/libretro-common/streams/interface_stream.c +++ b/libretro-common/streams/interface_stream.c @@ -67,7 +67,8 @@ bool intfstream_resize(intfstream_internal_t *intf, intfstream_info_t *info) return true; } -bool intfstream_open(intfstream_internal_t *intf, const char *path, unsigned mode, ssize_t len) +bool intfstream_open(intfstream_internal_t *intf, const char *path, + unsigned mode, ssize_t len) { if (!intf) return false; @@ -120,6 +121,22 @@ error: return NULL; } +int intfstream_seek(intfstream_internal_t *intf, int offset, int whence) +{ + if (!intf) + return -1; + + switch (intf->type) + { + case INTFSTREAM_FILE: + return filestream_seek(intf->file.fp, offset, whence); + case INTFSTREAM_MEMORY: + return memstream_seek(intf->memory.fp, offset, whence); + } + + return -1; +} + ssize_t intfstream_read(intfstream_internal_t *intf, void *s, size_t len) { if (!intf) @@ -136,7 +153,8 @@ ssize_t intfstream_read(intfstream_internal_t *intf, void *s, size_t len) return 0; } -ssize_t intfstream_write(intfstream_internal_t *intf, const void *s, size_t len) +ssize_t intfstream_write(intfstream_internal_t *intf, + const void *s, size_t len) { if (!intf) return 0; @@ -152,7 +170,8 @@ ssize_t intfstream_write(intfstream_internal_t *intf, const void *s, size_t len) return 0; } -char *intfstream_gets(intfstream_internal_t *intf, char *buffer, size_t len) +char *intfstream_gets(intfstream_internal_t *intf, + char *buffer, size_t len) { if (!intf) return NULL; diff --git a/libretro-common/streams/memory_stream.c b/libretro-common/streams/memory_stream.c index 8bcf9958b3..396f388d0f 100644 --- a/libretro-common/streams/memory_stream.c +++ b/libretro-common/streams/memory_stream.c @@ -48,7 +48,8 @@ size_t memstream_get_last_size(void) return last_file_size; } -static void memstream_init(memstream_t *stream, uint8_t *buffer, size_t max_size) +static void memstream_init(memstream_t *stream, + uint8_t *buffer, size_t max_size) { if (!stream) return;