Fix Windows fie dialog args freeing

This commit is contained in:
Semphris
2025-01-18 11:35:33 -05:00
committed by Sam Lantinga
parent 721fc7de0b
commit 19f42094bb

View File

@@ -128,21 +128,18 @@ void windows_ShowFileDialog(void *ptr)
} else { } else {
SDL_SetError("Couldn't load Comdlg32.dll"); SDL_SetError("Couldn't load Comdlg32.dll");
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
freeWinArgs(args);
return; return;
} }
if (!pGetAnyFileName) { if (!pGetAnyFileName) {
SDL_SetError("Couldn't load GetOpenFileName/GetSaveFileName from library"); SDL_SetError("Couldn't load GetOpenFileName/GetSaveFileName from library");
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
freeWinArgs(args);
return; return;
} }
if (!pCommDlgExtendedError) { if (!pCommDlgExtendedError) {
SDL_SetError("Couldn't load CommDlgExtendedError from library"); SDL_SetError("Couldn't load CommDlgExtendedError from library");
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
freeWinArgs(args);
return; return;
} }
@@ -217,7 +214,6 @@ void windows_ShowFileDialog(void *ptr)
if (!title_w) { if (!title_w) {
SDL_free(filebuffer); SDL_free(filebuffer);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
freeWinArgs(args);
return; return;
} }
@@ -276,7 +272,6 @@ void windows_ShowFileDialog(void *ptr)
if (!chosen_files_list) { if (!chosen_files_list) {
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
@@ -287,7 +282,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
@@ -309,7 +303,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
@@ -328,7 +321,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
@@ -344,7 +336,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
} }
@@ -358,7 +349,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
@@ -370,7 +360,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list); SDL_free(chosen_files_list);
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
return; return;
} }
} }
@@ -400,13 +389,12 @@ void windows_ShowFileDialog(void *ptr)
} }
SDL_free(filebuffer); SDL_free(filebuffer);
freeWinArgs(args);
} }
int windows_file_dialog_thread(void *ptr) int windows_file_dialog_thread(void *ptr)
{ {
windows_ShowFileDialog(ptr); windows_ShowFileDialog(ptr);
SDL_free(ptr); freeWinArgs(ptr);
return 0; return 0;
} }
@@ -461,7 +449,6 @@ void windows_ShowFolderDialog(void *ptr)
if (!title_w) { if (!title_w) {
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
freeWinFArgs(args);
return; return;
} }
@@ -494,14 +481,12 @@ void windows_ShowFolderDialog(void *ptr)
const char *files[1] = { NULL }; const char *files[1] = { NULL };
callback(userdata, (const char * const*) files, -1); callback(userdata, (const char * const*) files, -1);
} }
freeWinFArgs(args);
} }
int windows_folder_dialog_thread(void *ptr) int windows_folder_dialog_thread(void *ptr)
{ {
windows_ShowFolderDialog(ptr); windows_ShowFolderDialog(ptr);
SDL_free(ptr); freeWinFArgs((winFArgs *)ptr);
return 0; return 0;
} }
@@ -584,7 +569,8 @@ static void ShowFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_
if (thread == NULL) { if (thread == NULL) {
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(args); // The thread won't have run, therefore the data won't have been freed
freeWinArgs(args);
return; return;
} }
@@ -620,7 +606,8 @@ void ShowFolderDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Windo
if (thread == NULL) { if (thread == NULL) {
callback(userdata, NULL, -1); callback(userdata, NULL, -1);
SDL_free(args); // The thread won't have run, therefore the data won't have been freed
freeWinFArgs(args);
return; return;
} }