foxygit / doom Log in
commit a854a3a5e000ad0bb78d4bb51ecc8c408dd44ec6
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Mon Nov 12 20:46:38 2012 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Mon Nov 12 20:46:38 2012 +0000

    Fix registry handles not being closed (thanks Quasar).

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 2540
---
 src/d_iwad.c | 38 +++++++++++++++++---------------------
 1 file changed, 17 insertions(+), 21 deletions(-)

diff --git a/src/d_iwad.c b/src/d_iwad.c
index 6d0ade26..a810f2a2 100644
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -172,36 +172,30 @@ static char *GetRegistryString(registry_value_t *reg_val)

     // Open the key (directory where the value is stored)

-    if (RegOpenKeyEx(reg_val->root, reg_val->path, 0, KEY_READ, &key)
-          != ERROR_SUCCESS)
+    if (RegOpenKeyEx(reg_val->root, reg_val->path,
+                     0, KEY_READ, &key) != ERROR_SUCCESS)
     {
         return NULL;
     }

-    // Find the type and length of the string
+    result = NULL;

-    if (RegQueryValueEx(key, reg_val->value, NULL, &valtype, NULL, &len)
-          != ERROR_SUCCESS)
-    {
-        return NULL;
-    }
-
-    // Only accept strings
+    // Find the type and length of the string, and only accept strings.

-    if (valtype != REG_SZ)
+    if (RegQueryValueEx(key, reg_val->value,
+                        NULL, &valtype, NULL, &len) == ERROR_SUCCESS
+     && valtype == REG_SZ)
     {
-        return NULL;
-    }
-
-    // Allocate a buffer for the value and read the value
+        // Allocate a buffer for the value and read the value

-    result = malloc(len);
+        result = malloc(len);

-    if (RegQueryValueEx(key, reg_val->value, NULL, &valtype, (unsigned char *) result, &len)
-          != ERROR_SUCCESS)
-    {
-        free(result);
-        return NULL;
+        if (RegQueryValueEx(key, reg_val->value, NULL, &valtype,
+                            (unsigned char *) result, &len) != ERROR_SUCCESS)
+        {
+            free(result);
+            result = NULL;
+        }
     }

     // Close the key
@@ -299,6 +293,8 @@ static void CheckSteamEdition(void)

         AddIWADDir(subpath);
     }
+
+    free(install_path);
 }

 // Default install directories for DOS Doom