shithub: choc

Download patch

ref: a854a3a5e000ad0bb78d4bb51ecc8c408dd44ec6
parent: cab5118726def9984202599e9337b8b86111977a
author: Simon Howard <[email protected]>
date: Mon Nov 12 15:46:38 EST 2012

Fix registry handles not being closed (thanks Quasar).

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 2540

--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -172,36 +172,30 @@
 
     // 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;
-    }
+    // Find the type and length of the string, and only accept strings.
 
-    // 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 @@
 
         AddIWADDir(subpath);
     }
+
+    free(install_path);
 }
 
 // Default install directories for DOS Doom