]> code.delx.au - gnu-emacs/commitdiff
addpm.c: Replace existing entries, but do not create new ones
authorJuanma Barranquero <lekktu@gmail.com>
Sat, 24 Oct 2015 02:31:30 +0000 (04:31 +0200)
committerJuanma Barranquero <lekktu@gmail.com>
Sat, 24 Oct 2015 22:34:52 +0000 (00:34 +0200)
* nt/addpm.c (add_registry): If the Emacs registry key exists, replace
existing values from previous versions, but do not add new ones; the
key could exist for other reasons unrelated to old Emacsen, like X-style
resources, or to set some environment variables like HOME or LANG, and
in that case we don't want to populate it with obsolete values.

nt/addpm.c

index ba0eb36b08059bba0981b030a161a18e1b26f2c2..caa3272180e7fb67c3002c1993d7c4dbe33278b3 100644 (file)
@@ -186,17 +186,20 @@ add_registry (const char *path)
      have any resources.  */
 
   if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0,
-                     KEY_WRITE, &hrootkey) != ERROR_SUCCESS
+                   KEY_WRITE | KEY_QUERY_VALUE, &hrootkey) != ERROR_SUCCESS
       && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0,
-                        KEY_WRITE, &hrootkey) != ERROR_SUCCESS)
+                      KEY_WRITE | KEY_QUERY_VALUE, &hrootkey) != ERROR_SUCCESS)
     return;
 
   for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++)
     {
       const char * value = env_vars[i].value ? env_vars[i].value : path;
 
-      RegSetValueEx (hrootkey, env_vars[i].name, 0, REG_EXPAND_SZ,
-                    value, lstrlen (value) + 1);
+      /* Replace only those settings that already exist.  */
+      if (RegQueryValueEx (hrootkey, env_vars[i].name, NULL,
+                          NULL, NULL, NULL) == ERROR_SUCCESS)
+       RegSetValueEx (hrootkey, env_vars[i].name, 0, REG_EXPAND_SZ,
+                      value, lstrlen (value) + 1);
     }
 
   RegCloseKey (hrootkey);