rwops: Renamed SDL_CreateRW and SDL_DestroyRW to SDL_OpenRW and SDL_CloseRW.

This commit is contained in:
Ryan C. Gordon 2024-03-12 09:01:37 -04:00
parent 525919b315
commit 655ceb3b31
No known key found for this signature in database
GPG Key ID: FA148B892AB48044
22 changed files with 81 additions and 95 deletions

View File

@ -1815,16 +1815,6 @@ expression e2;
+ SDL_RW_SEEK_SET
@@
@@
- SDL_AllocRW
+ SDL_CreateRW
(...)
@@
@@
- SDL_FreeRW
+ SDL_DestroyRW
(...)
@@
@@
- SDL_SensorClose
+ SDL_CloseSensor
(...)

View File

@ -1156,9 +1156,9 @@ The following symbols have been renamed:
* RW_SEEK_END => SDL_RW_SEEK_END
* RW_SEEK_SET => SDL_RW_SEEK_SET
SDL_RWops is now an opaque structure. The existing APIs to create a RWops (SDL_RWFromFile, etc) still function as expected, but to make a custom RWops with app-provided function pointers, call SDL_CreateRW and provide the function pointers through there. To call into a RWops's functionality, use the standard APIs (SDL_RWread, etc) instead of calling into function pointers directly.
SDL_RWops is now an opaque structure. The existing APIs to create a RWops (SDL_RWFromFile, etc) still function as expected, but to make a custom RWops with app-provided function pointers, call SDL_OpenRW and provide the function pointers through there. To call into a RWops's functionality, use the standard APIs (SDL_RWread, etc) instead of calling into function pointers directly.
The RWops function pointers are now in a separate structure called SDL_RWopsInteface, which is provided to SDL_CreateRW. All the functions now take a `void *` userdata argument for their first parameter instead of an SDL_RWops, since that's now an opaque structure.
The RWops function pointers are now in a separate structure called SDL_RWopsInteface, which is provided to SDL_OpenRW. All the functions now take a `void *` userdata argument for their first parameter instead of an SDL_RWops, since that's now an opaque structure.
SDL_RWread and SDL_RWwrite (and SDL_RWopsInterface::read, SDL_RWopsInterface::write) have a different function signature in SDL3.
@ -1196,11 +1196,11 @@ size_t custom_read(void *ptr, size_t size, size_t nitems, SDL_RWops *stream)
SDL_RWops::type was removed and has no replacement; it wasn't meaningful for app-provided implementations at all, and wasn't much use for SDL's internal implementations, either.
SDL_RWopsInterface::close implementations should clean up their own userdata, but not call SDL_DestroyRW on themselves; now the contract is always that SDL_DestroyRW is called, which calls `->close` and then frees the opaque object.
SDL_RWopsInterface::close implementations should clean up their own userdata, but not call SDL_CloseRW on themselves; now the contract is always that SDL_CloseRW is called, which calls `->close` and then frees the opaque object.
SDL_RWFromFP has been removed from the API, due to issues when the SDL library uses a different C runtime from the application.
SDL_AllocRW(), SDL_FreeRW(), SDL_RWclose() and direct access to the `->close` function pointer have been removed from the API, so there's only one path to manage RWops lifetimes now: SDL_CreateRW() and SDL_DestroyRW().
SDL_AllocRW(), SDL_FreeRW(), SDL_RWclose() and direct access to the `->close` function pointer have been removed from the API, so there's only one path to manage RWops lifetimes now: SDL_OpenRW() and SDL_CloseRW().
You can implement this in your own code easily:
@ -1295,7 +1295,7 @@ SDL_RWops *SDL_RWFromFP(FILE *fp, SDL_bool autoclose)
rwopsdata->fp = fp;
rwopsdata->autoclose = autoclose;
rwops = SDL_CreateRW(&iface, rwopsdata);
rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
iface.close(rwopsdata);
}

View File

@ -1317,7 +1317,7 @@ extern DECLSPEC int SDLCALL SDL_SetAudioPostmixCallback(SDL_AudioDeviceID devid,
* ```
*
* \param src The data source for the WAVE data
* \param freesrc If SDL_TRUE, calls SDL_DestroyRW() on `src` before returning,
* \param freesrc If SDL_TRUE, calls SDL_CloseRW() on `src` before returning,
* even in the case of an error
* \param spec A pointer to an SDL_AudioSpec that will be set to the WAVE
* data's format details on successful return

View File

@ -268,7 +268,7 @@ extern DECLSPEC int SDLCALL SDL_AddGamepadMapping(const char *mapping);
* constrained environment.
*
* \param src the data stream for the mappings to be added
* \param freesrc if SDL_TRUE, calls SDL_DestroyRW() on `src` before returning,
* \param freesrc if SDL_TRUE, calls SDL_CloseRW() on `src` before returning,
* even in the case of an error
* \returns the number of mappings added or -1 on error; call SDL_GetError()
* for more information.

View File

@ -452,8 +452,6 @@
#define RW_SEEK_CUR SDL_RW_SEEK_CUR
#define RW_SEEK_END SDL_RW_SEEK_END
#define RW_SEEK_SET SDL_RW_SEEK_SET
#define SDL_AllocRW SDL_CreateRW
#define SDL_FreeRW SDL_DestroyRW
#define SDL_ReadBE16 SDL_ReadU16BE
#define SDL_ReadBE32 SDL_ReadU32BE
#define SDL_ReadBE64 SDL_ReadU64BE
@ -938,8 +936,6 @@
#define RW_SEEK_CUR RW_SEEK_CUR_renamed_SDL_RW_SEEK_CUR
#define RW_SEEK_END RW_SEEK_END_renamed_SDL_RW_SEEK_END
#define RW_SEEK_SET RW_SEEK_SET_renamed_SDL_RW_SEEK_SET
#define SDL_AllocRW SDL_AllocRW_renamed_SDL_CreateRW
#define SDL_FreeRW SDL_FreeRW_renamed_SDL_DestroyRW
#define SDL_ReadBE16 SDL_ReadBE16_renamed_SDL_ReadU16BE
#define SDL_ReadBE32 SDL_ReadBE32_renamed_SDL_ReadU32BE
#define SDL_ReadBE64 SDL_ReadBE64_renamed_SDL_ReadU64BE

View File

@ -234,30 +234,30 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, size_t si
/**
* Use this function to allocate a SDL_RWops structure.
* Create a custom SDL_RWops.
*
* Applications do not need to use this function unless they are providing
* their own SDL_RWops implementation. If you just need an SDL_RWops to
* read/write a common data source, you should use the built-in
* implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc.
*
* You must free the returned pointer with SDL_DestroyRW().
* You must free the returned pointer with SDL_CloseRW().
*
* \returns a pointer to the allocated memory on success, or NULL on failure;
* call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.0.0.
*
* \sa SDL_DestroyRW
* \sa SDL_CloseRW
*/
extern DECLSPEC SDL_RWops *SDLCALL SDL_CreateRW(const SDL_RWopsInterface *iface, void *userdata);
extern DECLSPEC SDL_RWops *SDLCALL SDL_OpenRW(const SDL_RWopsInterface *iface, void *userdata);
/**
* Close and free an allocated SDL_RWops structure.
*
* SDL_DestroyRW() closes and cleans up the SDL_RWops stream. It releases any
* SDL_CloseRW() closes and cleans up the SDL_RWops stream. It releases any
* resources used by the stream and frees the SDL_RWops itself with
* SDL_DestroyRW(). This returns 0 on success, or -1 if the stream failed to
* SDL_CloseRW(). This returns 0 on success, or -1 if the stream failed to
* flush to its output (e.g. to disk).
*
* Note that if this fails to flush the stream to disk, this function reports
@ -276,7 +276,7 @@ extern DECLSPEC SDL_RWops *SDLCALL SDL_CreateRW(const SDL_RWopsInterface *iface,
* \sa SDL_RWseek
* \sa SDL_RWwrite
*/
extern DECLSPEC int SDLCALL SDL_DestroyRW(SDL_RWops *context);
extern DECLSPEC int SDLCALL SDL_CloseRW(SDL_RWops *context);
/**
* Get the properties associated with an SDL_RWops.
@ -489,7 +489,7 @@ extern DECLSPEC size_t SDLCALL SDL_RWvprintf(SDL_RWops *context, SDL_PRINTF_FORM
*
* \param src the SDL_RWops to read all available data from
* \param datasize if not NULL, will store the number of bytes read
* \param freesrc if SDL_TRUE, calls SDL_DestroyRW() on `src` before returning,
* \param freesrc if SDL_TRUE, calls SDL_CloseRW() on `src` before returning,
* even in the case of an error
* \returns the data, or NULL if there was an error.
*

View File

@ -328,7 +328,7 @@ extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface);
* will result in a memory leak.
*
* \param src the data stream for the surface
* \param freesrc if SDL_TRUE, calls SDL_DestroyRW() on `src` before returning,
* \param freesrc if SDL_TRUE, calls SDL_CloseRW() on `src` before returning,
* even in the case of an error
* \returns a pointer to a new SDL_Surface structure or NULL if there was an
* error; call SDL_GetError() for more information.
@ -370,7 +370,7 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP(const char *file);
*
* \param surface the SDL_Surface structure containing the image to be saved
* \param dst a data stream to save to
* \param freedst if SDL_TRUE, calls SDL_DestroyRW() on `dst` before returning,
* \param freedst if SDL_TRUE, calls SDL_CloseRW() on `dst` before returning,
* even in the case of an error
* \returns 0 on success or a negative error code on failure; call
* SDL_GetError() for more information.

View File

@ -1629,7 +1629,7 @@ static int WaveReadFormat(WaveFile *file)
return -1;
}
} else if (format->encoding == PCM_CODE) {
SDL_DestroyRW(fmtsrc);
SDL_CloseRW(fmtsrc);
return SDL_SetError("Missing wBitsPerSample field in WAVE fmt chunk");
}
@ -1649,7 +1649,7 @@ static int WaveReadFormat(WaveFile *file)
/* Extensible header must be at least 22 bytes. */
if (fmtlen < 40 || format->extsize < 22) {
SDL_DestroyRW(fmtsrc);
SDL_CloseRW(fmtsrc);
return SDL_SetError("Extensible WAVE header too small");
}
@ -1661,7 +1661,7 @@ static int WaveReadFormat(WaveFile *file)
format->encoding = WaveGetFormatGUIDEncoding(format);
}
SDL_DestroyRW(fmtsrc);
SDL_CloseRW(fmtsrc);
return 0;
}
@ -2117,7 +2117,7 @@ int SDL_LoadWAV_RW(SDL_RWops *src, SDL_bool freesrc, SDL_AudioSpec *spec, Uint8
SDL_free(file.decoderdata);
done:
if (freesrc && src) {
SDL_DestroyRW(src);
SDL_CloseRW(src);
}
return result;
}

View File

@ -68,7 +68,7 @@ static int DISKAUDIO_CaptureFromDevice(SDL_AudioDevice *device, void *buffer, in
buflen -= br;
buffer = ((Uint8 *)buffer) + br;
if (buflen > 0) { // EOF (or error, but whatever).
SDL_DestroyRW(h->io);
SDL_CloseRW(h->io);
h->io = NULL;
}
}
@ -88,7 +88,7 @@ static void DISKAUDIO_CloseDevice(SDL_AudioDevice *device)
{
if (device->hidden) {
if (device->hidden->io) {
SDL_DestroyRW(device->hidden->io);
SDL_CloseRW(device->hidden->io);
}
SDL_free(device->hidden->mixbuf);
SDL_free(device->hidden);

View File

@ -52,7 +52,6 @@ SDL3_0.0.0 {
SDL_CreatePalette;
SDL_CreatePixelFormat;
SDL_CreatePopupWindow;
SDL_CreateRW;
SDL_CreateRWLock;
SDL_CreateRenderer;
SDL_CreateSemaphore;
@ -79,7 +78,6 @@ SDL3_0.0.0 {
SDL_DestroyMutex;
SDL_DestroyPalette;
SDL_DestroyPixelFormat;
SDL_DestroyRW;
SDL_DestroyRWLock;
SDL_DestroyRenderer;
SDL_DestroySemaphore;
@ -978,6 +976,8 @@ SDL3_0.0.0 {
SDL_ShowOpenFileDialog;
SDL_ShowSaveFileDialog;
SDL_ShowOpenFolderDialog;
SDL_OpenRW;
SDL_CloseRW;
# extra symbols go here (don't modify this line)
local: *;
};

View File

@ -76,7 +76,6 @@
#define SDL_CreatePalette SDL_CreatePalette_REAL
#define SDL_CreatePixelFormat SDL_CreatePixelFormat_REAL
#define SDL_CreatePopupWindow SDL_CreatePopupWindow_REAL
#define SDL_CreateRW SDL_CreateRW_REAL
#define SDL_CreateRWLock SDL_CreateRWLock_REAL
#define SDL_CreateRenderer SDL_CreateRenderer_REAL
#define SDL_CreateSemaphore SDL_CreateSemaphore_REAL
@ -103,7 +102,6 @@
#define SDL_DestroyMutex SDL_DestroyMutex_REAL
#define SDL_DestroyPalette SDL_DestroyPalette_REAL
#define SDL_DestroyPixelFormat SDL_DestroyPixelFormat_REAL
#define SDL_DestroyRW SDL_DestroyRW_REAL
#define SDL_DestroyRWLock SDL_DestroyRWLock_REAL
#define SDL_DestroyRenderer SDL_DestroyRenderer_REAL
#define SDL_DestroySemaphore SDL_DestroySemaphore_REAL
@ -1003,3 +1001,5 @@
#define SDL_ShowOpenFileDialog SDL_ShowOpenFileDialog_REAL
#define SDL_ShowSaveFileDialog SDL_ShowSaveFileDialog_REAL
#define SDL_ShowOpenFolderDialog SDL_ShowOpenFolderDialog_REAL
#define SDL_OpenRW SDL_OpenRW_REAL
#define SDL_CloseRW SDL_CloseRW_REAL

View File

@ -142,7 +142,6 @@ SDL_DYNAPI_PROC(SDL_Mutex*,SDL_CreateMutex,(void),(),return)
SDL_DYNAPI_PROC(SDL_Palette*,SDL_CreatePalette,(int a),(a),return)
SDL_DYNAPI_PROC(SDL_PixelFormat*,SDL_CreatePixelFormat,(SDL_PixelFormatEnum a),(a),return)
SDL_DYNAPI_PROC(SDL_Window*,SDL_CreatePopupWindow,(SDL_Window *a, int b, int c, int d, int e, Uint32 f),(a,b,c,d,e,f),return)
SDL_DYNAPI_PROC(SDL_RWops*,SDL_CreateRW,(const SDL_RWopsInterface *a, void *b),(a,b),return)
SDL_DYNAPI_PROC(SDL_RWLock*,SDL_CreateRWLock,(void),(),return)
SDL_DYNAPI_PROC(SDL_Renderer*,SDL_CreateRenderer,(SDL_Window *a, const char *b, Uint32 c),(a,b,c),return)
SDL_DYNAPI_PROC(SDL_Semaphore*,SDL_CreateSemaphore,(Uint32 a),(a),return)
@ -166,7 +165,6 @@ SDL_DYNAPI_PROC(void,SDL_DestroyCursor,(SDL_Cursor *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyMutex,(SDL_Mutex *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyPalette,(SDL_Palette *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyPixelFormat,(SDL_PixelFormat *a),(a),)
SDL_DYNAPI_PROC(int,SDL_DestroyRW,(SDL_RWops *a),(a),return)
SDL_DYNAPI_PROC(void,SDL_DestroyRWLock,(SDL_RWLock *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroyRenderer,(SDL_Renderer *a),(a),)
SDL_DYNAPI_PROC(void,SDL_DestroySemaphore,(SDL_Semaphore *a),(a),)
@ -1028,3 +1026,5 @@ SDL_DYNAPI_PROC(int,SDL_GetJoystickBall,(SDL_Joystick *a, int b, int *c, int *d)
SDL_DYNAPI_PROC(void,SDL_ShowOpenFileDialog,(SDL_DialogFileCallback a, void *b, SDL_Window *c, const SDL_DialogFileFilter *d, const char *e, int f),(a,b,c,d,e,f),)
SDL_DYNAPI_PROC(void,SDL_ShowSaveFileDialog,(SDL_DialogFileCallback a, void *b, SDL_Window *c, const SDL_DialogFileFilter *d, const char *e),(a,b,c,d,e),)
SDL_DYNAPI_PROC(void,SDL_ShowOpenFolderDialog,(SDL_DialogFileCallback a, void *b, SDL_Window *c, const char *d, int e),(a,b,c,d,e),)
SDL_DYNAPI_PROC(SDL_RWops*,SDL_OpenRW,(const SDL_RWopsInterface *a, void *b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_CloseRW,(SDL_RWops *a),(a),return)

View File

@ -424,7 +424,7 @@ static SDL_RWops *SDL_RWFromFP(FILE *fp, SDL_bool autoclose)
rwopsdata->fp = fp;
rwopsdata->autoclose = autoclose;
SDL_RWops *rwops = SDL_CreateRW(&iface, rwopsdata);
SDL_RWops *rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
iface.close(rwopsdata);
}
@ -565,7 +565,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
void *rwopsdata = NULL;
if (Android_JNI_FileOpen(&rwopsdata, file, mode) < 0) {
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
return NULL;
}
@ -577,7 +577,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
iface.write = Android_JNI_FileWrite;
iface.close = Android_JNI_FileClose;
rwops = SDL_CreateRW(&iface, rwopsdata);
rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
iface.close(rwopsdata);
}
@ -591,7 +591,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
}
if (windows_file_open(rwopsdata, file, mode) < 0) {
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
return NULL;
}
@ -603,7 +603,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
iface.write = windows_file_write;
iface.close = windows_file_close;
rwops = SDL_CreateRW(&iface, rwopsdata);
rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
windows_file_close(rwopsdata);
}
@ -666,7 +666,7 @@ SDL_RWops *SDL_RWFromMem(void *mem, size_t size)
rwopsdata->here = rwopsdata->base;
rwopsdata->stop = rwopsdata->base + size;
SDL_RWops *rwops = SDL_CreateRW(&iface, rwopsdata);
SDL_RWops *rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
SDL_free(rwopsdata);
}
@ -699,14 +699,14 @@ SDL_RWops *SDL_RWFromConstMem(const void *mem, size_t size)
rwopsdata->here = rwopsdata->base;
rwopsdata->stop = rwopsdata->base + size;
SDL_RWops *rwops = SDL_CreateRW(&iface, rwopsdata);
SDL_RWops *rwops = SDL_OpenRW(&iface, rwopsdata);
if (!rwops) {
SDL_free(rwopsdata);
}
return rwops;
}
SDL_RWops *SDL_CreateRW(const SDL_RWopsInterface *iface, void *userdata)
SDL_RWops *SDL_OpenRW(const SDL_RWopsInterface *iface, void *userdata)
{
if (!iface) {
SDL_InvalidParamError("iface");
@ -721,7 +721,7 @@ SDL_RWops *SDL_CreateRW(const SDL_RWopsInterface *iface, void *userdata)
return rwops;
}
int SDL_DestroyRW(SDL_RWops *rwops)
int SDL_CloseRW(SDL_RWops *rwops)
{
int retval = 0;
if (rwops) {
@ -797,7 +797,7 @@ done:
*datasize = (size_t)size_total;
}
if (freesrc && src) {
SDL_DestroyRW(src);
SDL_CloseRW(src);
}
return data;
}

View File

@ -1913,7 +1913,7 @@ static const void *SDLTest_ScreenShotClipboardProvider(void *context, const char
image = NULL;
}
}
SDL_DestroyRW(file);
SDL_CloseRW(file);
if (image) {
data->image = image;
@ -1984,7 +1984,7 @@ static void SDLTest_PasteScreenShot(void)
if (file) {
SDL_Log("Writing clipboard image to %s", filename);
SDL_RWwrite(file, data, size);
SDL_DestroyRW(file);
SDL_CloseRW(file);
}
SDL_free(data);
return;

View File

@ -578,7 +578,7 @@ done:
surface = NULL;
}
if (freesrc && src) {
SDL_DestroyRW(src);
SDL_CloseRW(src);
}
return surface;
}
@ -857,7 +857,7 @@ done:
SDL_DestroySurface(intermediate_surface);
}
if (freedst && dst) {
if (SDL_DestroyRW(dst) < 0) {
if (SDL_CloseRW(dst) < 0) {
was_error = SDL_TRUE;
}
}

View File

@ -273,8 +273,8 @@ static int rwops_testMem(void *arg)
testGenericRWopsValidations(rw, SDL_TRUE);
/* Close */
result = SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
result = SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
return TEST_COMPLETED;
@ -305,8 +305,8 @@ static int rwops_testConstMem(void *arg)
testGenericRWopsValidations(rw, SDL_FALSE);
/* Close handle */
result = SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
result = SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
return TEST_COMPLETED;
@ -337,8 +337,8 @@ static int rwops_testFileRead(void *arg)
testGenericRWopsValidations(rw, SDL_FALSE);
/* Close handle */
result = SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
result = SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
return TEST_COMPLETED;
@ -369,8 +369,8 @@ static int rwops_testFileWrite(void *arg)
testGenericRWopsValidations(rw, SDL_TRUE);
/* Close handle */
result = SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
result = SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
return TEST_COMPLETED;
@ -379,8 +379,8 @@ static int rwops_testFileWrite(void *arg)
/**
* Tests alloc and free RW context.
*
* \sa SDL_CreateRW
* \sa SDL_DestroyRW
* \sa SDL_OpenRW
* \sa SDL_CloseRW
*/
static int rwops_testAllocFree(void *arg)
{
@ -389,16 +389,16 @@ static int rwops_testAllocFree(void *arg)
SDL_RWops *rw;
SDL_zero(iface);
rw = SDL_CreateRW(&iface, NULL);
SDLTest_AssertPass("Call to SDL_CreateRW() succeeded");
SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_CreateRW() is not NULL");
rw = SDL_OpenRW(&iface, NULL);
SDLTest_AssertPass("Call to SDL_OpenRW() succeeded");
SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_OpenRW() is not NULL");
if (rw == NULL) {
return TEST_ABORTED;
}
/* Free context again */
SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
return TEST_COMPLETED;
}
@ -435,8 +435,8 @@ static int rwops_testCompareRWFromMemWithRWFromFile(void *arg)
SDLTest_AssertPass("Call to SDL_RWread(mem, size=%d)", size * 6);
sv_mem = SDL_RWseek(rwops_mem, 0, SEEK_END);
SDLTest_AssertPass("Call to SDL_RWseek(mem,SEEK_END)");
result = SDL_DestroyRW(rwops_mem);
SDLTest_AssertPass("Call to SDL_DestroyRW(mem)");
result = SDL_CloseRW(rwops_mem);
SDLTest_AssertPass("Call to SDL_CloseRW(mem)");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
/* Read/see from file */
@ -446,8 +446,8 @@ static int rwops_testCompareRWFromMemWithRWFromFile(void *arg)
SDLTest_AssertPass("Call to SDL_RWread(file, size=%d)", size * 6);
sv_file = SDL_RWseek(rwops_file, 0, SEEK_END);
SDLTest_AssertPass("Call to SDL_RWseek(file,SEEK_END)");
result = SDL_DestroyRW(rwops_file);
SDLTest_AssertPass("Call to SDL_DestroyRW(file)");
result = SDL_CloseRW(rwops_file);
SDLTest_AssertPass("Call to SDL_CloseRW(file)");
SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result);
/* Compare */
@ -590,8 +590,8 @@ static int rwops_testFileWriteReadEndian(void *arg)
SDLTest_AssertCheck(LE64test == LE64value, "Validate object read from SDL_ReadU64LE, expected: %" SDL_PRIu64 ", got: %" SDL_PRIu64, LE64value, LE64test);
/* Close handle */
cresult = SDL_DestroyRW(rw);
SDLTest_AssertPass("Call to SDL_DestroyRW() succeeded");
cresult = SDL_CloseRW(rw);
SDLTest_AssertPass("Call to SDL_CloseRW() succeeded");
SDLTest_AssertCheck(cresult == 0, "Verify result value is 0; got: %d", cresult);
}

View File

@ -55,7 +55,7 @@ rwops_error_quit(unsigned line, SDL_RWops *rwops)
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "testfile.c(%d): failed\n", line);
if (rwops) {
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
}
cleanup();
SDLTest_CommonDestroyState(state);
@ -126,25 +126,25 @@ int main(int argc, char *argv[])
if (!rwops) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
unlink(FBASENAME2);
rwops = SDL_RWFromFile(FBASENAME2, "wb+");
if (!rwops) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
unlink(FBASENAME2);
rwops = SDL_RWFromFile(FBASENAME2, "ab");
if (!rwops) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
unlink(FBASENAME2);
rwops = SDL_RWFromFile(FBASENAME2, "ab+");
if (!rwops) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
unlink(FBASENAME2);
SDL_Log("test2 OK\n");
@ -171,7 +171,7 @@ int main(int argc, char *argv[])
RWOP_ERR_QUIT(rwops); /* we are in write only mode */
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
rwops = SDL_RWFromFile(FBASENAME1, "rb"); /* read mode, file must exist */
if (!rwops) {
@ -208,7 +208,7 @@ int main(int argc, char *argv[])
RWOP_ERR_QUIT(rwops); /* readonly mode */
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
/* test 3: same with w+ mode */
rwops = SDL_RWFromFile(FBASENAME1, "wb+"); /* write + read + truncation */
@ -258,7 +258,7 @@ int main(int argc, char *argv[])
if (SDL_memcmp(test_buf, "12345678901234567890", 20) != 0) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
SDL_Log("test3 OK\n");
/* test 4: same in r+ mode */
@ -309,7 +309,7 @@ int main(int argc, char *argv[])
if (SDL_memcmp(test_buf, "12345678901234567890", 20) != 0) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
SDL_Log("test4 OK\n");
/* test5 : append mode */
@ -366,7 +366,7 @@ int main(int argc, char *argv[])
if (SDL_memcmp(test_buf, "123456789012345678901234567123", 30) != 0) {
RWOP_ERR_QUIT(rwops);
}
SDL_DestroyRW(rwops);
SDL_CloseRW(rwops);
SDL_Log("test5 OK\n");
cleanup();
SDL_Quit();

View File

@ -223,7 +223,7 @@ static int unifont_init(const char *fontname)
lineNumber++;
} while (bytesRead > 0);
SDL_DestroyRW(hexFile);
SDL_CloseRW(hexFile);
SDL_Log("unifont: Loaded %" SDL_PRIu32 " glyphs.\n", numGlyphs);
return 0;
}

View File

@ -452,7 +452,7 @@ int main(int argc, char **argv)
SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT);
SDL_DestroyRW(handle);
SDL_CloseRW(handle);
/* Create the window and renderer */
window_w = MOOSEPIC_W * scale;

View File

@ -117,7 +117,7 @@ int main(int argc, char **argv)
/* write out a WAV header... */
io = SDL_RWFromFile(file_out, "wb");
if (!io) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fopen('%s') failed: %s\n", file_out, SDL_GetError());
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "opening '%s' failed: %s\n", file_out, SDL_GetError());
ret = 5;
goto end;
}
@ -141,8 +141,8 @@ int main(int argc, char **argv)
SDL_WriteU32LE(io, dst_len); /* size */
SDL_RWwrite(io, dst_buf, dst_len);
if (SDL_DestroyRW(io) == -1) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fclose('%s') failed: %s\n", file_out, SDL_GetError());
if (SDL_CloseRW(io) == -1) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "closing '%s' failed: %s\n", file_out, SDL_GetError());
ret = 6;
goto end;
}

View File

@ -171,7 +171,7 @@ int main(int argc, char **argv)
quit(2);
}
SDL_RWread(handle, MooseFrames, MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT);
SDL_DestroyRW(handle);
SDL_CloseRW(handle);
/* Create the window and renderer */
window = SDL_CreateWindow("Happy Moose", MOOSEPIC_W * 4, MOOSEPIC_H * 4, SDL_WINDOW_RESIZABLE);

View File

@ -44,7 +44,7 @@ GetNearbyFilename(const char *file)
rw = SDL_RWFromFile(path, "rb");
if (rw) {
SDL_DestroyRW(rw);
SDL_CloseRW(rw);
return path;
}