mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-04 14:49:40 +00:00
iostream: Properly support the "x" mode for SDL_IOFromFile()
The "x" mode for `fopen()` (open file only if it doesn't exist) used to be a glibc-exclusive extension, but was later standardized in C11, and is now also implemented as part of every other widely-used libc: * musl: https://git.musl-libc.org/cgit/musl/tree/src/stdio/__fmodeflags.c?id=0ccaf0572e9cccda2cced0f7ee659af4c1c6679a * Android Bionic / OpenBSD:731631f300/libc/upstream-openbsd/lib/libc/stdio/flags.c (86)* Apple / FreeBSD:63976b830a/stdio/FreeBSD/flags.c (L91-L92)As a result, "x" has already been working on all our automatically tested platforms that implement `SDL_IOFromFile()` via `fopen()`. So all we'd be missing for proper support is a Windows implementation using `CREATE_NEW`, and the documentation that this mode exists and is intended to work.
This commit is contained in:
@@ -615,9 +615,9 @@ static int SDLCALL iostrm_testFileWrite(void *arg)
|
||||
int result;
|
||||
|
||||
/* Write test. */
|
||||
rw = SDL_IOFromFile(IOStreamWriteTestFilename, "w+");
|
||||
SDLTest_AssertPass("Call to SDL_IOFromFile(..,\"w+\") succeeded");
|
||||
SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_IOFromFile in write mode does not return NULL");
|
||||
rw = SDL_IOFromFile(IOStreamWriteTestFilename, "w+x");
|
||||
SDLTest_AssertPass("Call to SDL_IOFromFile(..,\"w+x\") succeeded");
|
||||
SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_IOFromFile in exclusive write mode does not return NULL");
|
||||
|
||||
/* Bail out if NULL */
|
||||
if (rw == NULL) {
|
||||
@@ -632,6 +632,11 @@ static int SDLCALL iostrm_testFileWrite(void *arg)
|
||||
SDLTest_AssertPass("Call to SDL_CloseIO() succeeded");
|
||||
SDLTest_AssertCheck(result == true, "Verify result value is true; got: %d", result);
|
||||
|
||||
/* Exclusively opening an existing file should fail. */
|
||||
rw = SDL_IOFromFile(IOStreamWriteTestFilename, "wx");
|
||||
SDLTest_AssertPass("Call to SDL_IOFromFile(..,\"wx\") succeeded");
|
||||
SDLTest_AssertCheck(rw == NULL, "Verify opening existing file with SDL_IOFromFile in exclusive write mode returns NULL");
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user