diff --git a/libretro-common/include/streams/interface_stream.h b/libretro-common/include/streams/interface_stream.h index 422768aee1..ba8a4d9f94 100644 --- a/libretro-common/include/streams/interface_stream.h +++ b/libretro-common/include/streams/interface_stream.h @@ -56,4 +56,10 @@ bool intfstream_resize(intfstream_internal_t *intf, bool intfstream_open(intfstream_internal_t *intf, const char *path, unsigned mode, ssize_t len); +ssize_t intfstream_read(intfstream_internal_t *intf, + void *s, size_t len); + +ssize_t intfstream_write(intfstream_internal_t *intf, + const void *s, size_t len); + #endif diff --git a/libretro-common/streams/interface_stream.c b/libretro-common/streams/interface_stream.c index d07c983012..359c66d972 100644 --- a/libretro-common/streams/interface_stream.c +++ b/libretro-common/streams/interface_stream.c @@ -98,3 +98,34 @@ error: return NULL; } +ssize_t intfstream_read(intfstream_internal_t *intf, void *s, size_t len) +{ + if (!intf) + return 0; + + switch (intf->type) + { + case INTFSTREAM_FILE: + return filestream_read(intf->file.fp, s, len); + case INTFSTREAM_MEMORY: + return memstream_read(intf->memory.fp, s, len); + } + + return 0; +} + +ssize_t intfstream_write(intfstream_internal_t *intf, const void *s, size_t len) +{ + if (!intf) + return 0; + + switch (intf->type) + { + case INTFSTREAM_FILE: + return filestream_write(intf->file.fp, s, len); + case INTFSTREAM_MEMORY: + return memstream_write(intf->memory.fp, s, len); + } + + return 0; +}