diff --git a/libretro-common/include/streams/file_stream.h b/libretro-common/include/streams/file_stream.h index e0241d6aa6..20adbb33a0 100644 --- a/libretro-common/include/streams/file_stream.h +++ b/libretro-common/include/streams/file_stream.h @@ -62,6 +62,8 @@ int filestream_close(RFILE *stream); int filestream_read_file(const char *path, void **buf, ssize_t *len); +char *filestream_gets(RFILE *stream, char *s, size_t len); + bool filestream_write_file(const char *path, const void *data, ssize_t size); int filestream_putc(RFILE *stream, int c); diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index 66f662bee1..34b4f7c71b 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -230,6 +230,17 @@ error: return NULL; } +char *filestream_gets(RFILE *stream, char *s, size_t len) +{ + if (!stream) + return NULL; +#if defined(HAVE_BUFFERED_IO) + return fgets(s, len, stream->fp); +#else + return gets(s); +#endif +} + ssize_t filestream_seek(RFILE *stream, ssize_t offset, int whence) { if (!stream) diff --git a/libretro-common/streams/interface_stream.c b/libretro-common/streams/interface_stream.c index 995ac218a7..0975211bb9 100644 --- a/libretro-common/streams/interface_stream.c +++ b/libretro-common/streams/interface_stream.c @@ -198,8 +198,7 @@ char *intfstream_gets(intfstream_internal_t *intf, switch (intf->type) { case INTFSTREAM_FILE: - /* unimplemented */ - break; + return filestream_gets(intf->file.fp, buffer, len); case INTFSTREAM_MEMORY: return memstream_gets(intf->memory.fp, buffer, len); }