summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--gtk/gtkfilesystemwin32.c44
2 files changed, 34 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 6efe9f47fe..efb75fd245 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-15 Tor Lillqvist <tml@novell.com>
+
+ * gtk/gtkfilesystemwin32.c (get_viewable_logical_drives): Don't
+ leak Registry key handles. (#516578)
+
2008-02-14 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c: (gdk_window_focus): Using
diff --git a/gtk/gtkfilesystemwin32.c b/gtk/gtkfilesystemwin32.c
index 55958eafe8..3fc8a088e4 100644
--- a/gtk/gtkfilesystemwin32.c
+++ b/gtk/gtkfilesystemwin32.c
@@ -346,33 +346,47 @@ static guint32
get_viewable_logical_drives (void)
{
guint viewable_drives = GetLogicalDrives ();
- HKEY my_key;
+ HKEY key;
DWORD var_type = REG_DWORD; //the value's a REG_DWORD type
DWORD no_drives_size = 4;
DWORD no_drives;
gboolean hklm_present = FALSE;
- RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_READ, &my_key);
- if (RegQueryValueEx (my_key, "NoDrives", NULL, &var_type, &no_drives, &no_drives_size) == ERROR_SUCCESS)
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE,
+ "Software\\Microsoft\\Windows\\"
+ "CurrentVersion\\Policies\\Explorer",
+ 0, KEY_READ, &key) == ERROR_SUCCESS)
{
- // We need the bits that are set in viewable_drives, and unset in no_drives.
- viewable_drives = viewable_drives & ~no_drives;
- hklm_present = TRUE;
+ if (RegQueryValueEx (key, "NoDrives", NULL, &var_type,
+ (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS)
+ {
+ /* We need the bits that are set in viewable_drives, and
+ * unset in no_drives.
+ */
+ viewable_drives = viewable_drives & ~no_drives;
+ hklm_present = TRUE;
+ }
+ RegCloseKey (key);
}
- // If the key is present in HKLM then the one in HKCU should be ignored
+ /* If the key is present in HKLM then the one in HKCU should be ignored */
if (!hklm_present)
{
- RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_READ, &my_key);
- if (RegQueryValueEx (my_key, "NoDrives", NULL, &var_type, &no_drives, &no_drives_size) == ERROR_SUCCESS)
- {
- // We need the bits that are set in viewable_drives, and unset in no_drives.
- viewable_drives = viewable_drives & ~no_drives;
- }
- }
+ if (RegOpenKeyEx (HKEY_CURRENT_USER,
+ "Software\\Microsoft\\Windows\\"
+ "CurrentVersion\\Policies\\Explorer",
+ 0, KEY_READ, &key) == ERROR_SUCCESS)
+ {
+ if (RegQueryValueEx (key, "NoDrives", NULL, &var_type,
+ (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS)
+ {
+ viewable_drives = viewable_drives & ~no_drives;
+ }
+ RegCloseKey (key);
+ }
+ }
- RegCloseKey (my_key);
return viewable_drives;
}