From 19f42094bb0141f2096ce3e7b724a1c744ab0f1f Mon Sep 17 00:00:00 2001
From: Semphris <[EMAIL REDACTED]>
Date: Sat, 18 Jan 2025 11:35:33 -0500
Subject: [PATCH] Fix Windows fie dialog args freeing
---
src/dialog/windows/SDL_windowsdialog.c | 25 ++++++-------------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/src/dialog/windows/SDL_windowsdialog.c b/src/dialog/windows/SDL_windowsdialog.c
index 04c046cb77e4d..fc25a194fb9a5 100644
--- a/src/dialog/windows/SDL_windowsdialog.c
+++ b/src/dialog/windows/SDL_windowsdialog.c
@@ -128,21 +128,18 @@ void windows_ShowFileDialog(void *ptr)
} else {
SDL_SetError("Couldn't load Comdlg32.dll");
callback(userdata, NULL, -1);
- freeWinArgs(args);
return;
}
if (!pGetAnyFileName) {
SDL_SetError("Couldn't load GetOpenFileName/GetSaveFileName from library");
callback(userdata, NULL, -1);
- freeWinArgs(args);
return;
}
if (!pCommDlgExtendedError) {
SDL_SetError("Couldn't load CommDlgExtendedError from library");
callback(userdata, NULL, -1);
- freeWinArgs(args);
return;
}
@@ -217,7 +214,6 @@ void windows_ShowFileDialog(void *ptr)
if (!title_w) {
SDL_free(filebuffer);
callback(userdata, NULL, -1);
- freeWinArgs(args);
return;
}
@@ -276,7 +272,6 @@ void windows_ShowFileDialog(void *ptr)
if (!chosen_files_list) {
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
@@ -287,7 +282,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
@@ -309,7 +303,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
@@ -328,7 +321,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
@@ -344,7 +336,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
}
@@ -358,7 +349,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
@@ -370,7 +360,6 @@ void windows_ShowFileDialog(void *ptr)
SDL_free(chosen_files_list);
callback(userdata, NULL, -1);
SDL_free(filebuffer);
- freeWinArgs(args);
return;
}
}
@@ -400,13 +389,12 @@ void windows_ShowFileDialog(void *ptr)
}
SDL_free(filebuffer);
- freeWinArgs(args);
}
int windows_file_dialog_thread(void *ptr)
{
windows_ShowFileDialog(ptr);
- SDL_free(ptr);
+ freeWinArgs(ptr);
return 0;
}
@@ -461,7 +449,6 @@ void windows_ShowFolderDialog(void *ptr)
if (!title_w) {
callback(userdata, NULL, -1);
- freeWinFArgs(args);
return;
}
@@ -494,14 +481,12 @@ void windows_ShowFolderDialog(void *ptr)
const char *files[1] = { NULL };
callback(userdata, (const char * const*) files, -1);
}
-
- freeWinFArgs(args);
}
int windows_folder_dialog_thread(void *ptr)
{
windows_ShowFolderDialog(ptr);
- SDL_free(ptr);
+ freeWinFArgs((winFArgs *)ptr);
return 0;
}
@@ -584,7 +569,8 @@ static void ShowFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_
if (thread == NULL) {
callback(userdata, NULL, -1);
- SDL_free(args);
+ // The thread won't have run, therefore the data won't have been freed
+ freeWinArgs(args);
return;
}
@@ -620,7 +606,8 @@ void ShowFolderDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Windo
if (thread == NULL) {
callback(userdata, NULL, -1);
- SDL_free(args);
+ // The thread won't have run, therefore the data won't have been freed
+ freeWinFArgs(args);
return;
}