From 46f8468c24a5d593214cb1f6d20a6500c340360a Mon Sep 17 00:00:00 2001 From: g0mb4 Date: Sun, 18 Aug 2024 19:25:15 +0200 Subject: [PATCH] Add support for `fopen()`'s modes. --- oogabooga/third_party/stb_vorbis.c | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/oogabooga/third_party/stb_vorbis.c b/oogabooga/third_party/stb_vorbis.c index 13ca4d4..bbae01f 100644 --- a/oogabooga/third_party/stb_vorbis.c +++ b/oogabooga/third_party/stb_vorbis.c @@ -70,8 +70,37 @@ int fseek(File f, s64 offset, s64 origin) { } File fopen(const char *filename, const char *mode) { - // Handling modes - File f = os_file_open_s(STR(filename), O_READ); + Os_Io_Open_Flags flags = 0; + + while (*mode) { + switch (*mode) { + case 'r': + if (*(mode + 1) == '+') { + flags = O_READ | O_WRITE; + } else { + flags = O_READ; + } + break; + + case 'w': + if (*(mode + 1) == '+') { + flags = O_READ | O_WRITE | O_CREATE; + } else { + flags = O_WRITE | O_CREATE; + } + break; + + case 'b': + // Do nothing. + break; + + default: + assert(0, "Unknown/unsupported fopen mode: %c", *mode); + } + mode++; + } + + File f = os_file_open_s(STR(filename), flags); return f; }