SDL: Fix Windows fie dialog args freeing

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;
     }