]> code.delx.au - gnu-emacs/blobdiff - nt/addpm.c
-
[gnu-emacs] / nt / addpm.c
index cd91a3e2d80be452917f7076f97ccd7148f391fa..2161ea786bd807302b65325cc8f334e628fec8f0 100644 (file)
@@ -1,12 +1,12 @@
 /* Add entries to the GNU Emacs Program Manager folder.
-   Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
+   Copyright (C) 1995, 2001-2016 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -62,15 +62,12 @@ DdeCallback (UINT uType, UINT uFmt, HCONV hconv,
 }
 
 #define DdeCommand(str)        \
-       DdeClientTransaction (str, strlen (str)+1, conversation, (HSZ)NULL, \
+       DdeClientTransaction ((LPBYTE)str, strlen (str)+1, conversation, (HSZ)NULL, \
                              CF_TEXT, XTYP_EXECUTE, 30000, NULL)
 
 #define REG_ROOT "SOFTWARE\\GNU\\Emacs"
-#define REG_GTK "SOFTWARE\\GTK\\2.0"
 #define REG_APP_PATH \
   "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\emacs.exe"
-#define REG_RUNEMACS_PATH \
-  "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\runemacs.exe"
 
 static struct entry
 {
@@ -104,13 +101,11 @@ env_vars[] =
 #endif
 };
 
-BOOL
+void
 add_registry (const char *path)
 {
   HKEY hrootkey = NULL;
   int i;
-  BOOL ok = TRUE;
-  DWORD size;
 
   /* Record the location of Emacs to the App Paths key if we have
      sufficient permissions to do so.  This helps Windows find emacs quickly
@@ -121,60 +116,18 @@ add_registry (const char *path)
      affect the general operation of other installations of Emacs, and we
      are blindly overwriting the Start Menu entries already.
   */
-  if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_APP_PATH, 0, "",
+  if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_APP_PATH, 0, NULL,
                       REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL,
                       &hrootkey, NULL) == ERROR_SUCCESS)
     {
       int len;
       char *emacs_path;
-      HKEY gtk_key = NULL;
 
       len = strlen (path) + 15; /* \bin\emacs.exe + terminator.  */
       emacs_path = (char *) alloca (len);
       sprintf (emacs_path, "%s\\bin\\emacs.exe", path);
 
       RegSetValueEx (hrootkey, NULL, 0, REG_EXPAND_SZ, emacs_path, len);
-
-      /* Look for a GTK installation. If found, add it to the library search
-         path for Emacs so that the image libraries it provides are available
-         to Emacs regardless of whether it is in the path or not.  */
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_GTK, REG_OPTION_NON_VOLATILE,
-                        KEY_READ, &gtk_key) == ERROR_SUCCESS)
-        {
-          if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
-                               NULL, &size) == ERROR_SUCCESS)
-            {
-              char *gtk_path = (char *) alloca (size);
-              if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
-                                   gtk_path, &size) == ERROR_SUCCESS)
-                {
-                  /* Make sure the emacs bin directory continues to be searched
-                     first by including it as well.  */
-                  char *dll_paths;
-                 HKEY runemacs_key = NULL;
-                  len = strlen (path) + 5 + size;
-                  dll_paths = (char *) alloca (size + strlen (path) + 1);
-                  sprintf (dll_paths, "%s\\bin;%s", path, gtk_path);
-                  RegSetValueEx (hrootkey, "Path", 0, REG_EXPAND_SZ,
-                                dll_paths, len);
-
-                 /* Set the same path for runemacs.exe, as the Explorer shell
-                    looks this up, so the above does not take effect when
-                    emacs.exe is spawned from runemacs.exe.  */
-                 if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_RUNEMACS_PATH,
-                                     0, "", REG_OPTION_NON_VOLATILE,
-                                     KEY_WRITE, NULL, &runemacs_key, NULL)
-                     == ERROR_SUCCESS)
-                   {
-                     RegSetValueEx (runemacs_key, "Path", 0, REG_EXPAND_SZ,
-                                    dll_paths, len);
-
-                     RegCloseKey (runemacs_key);
-                   }
-                }
-            }
-          RegCloseKey (gtk_key);
-        }
       RegCloseKey (hrootkey);
     }
 
@@ -186,29 +139,24 @@ add_registry (const char *path)
   /* Check both the current user and the local machine to see if we
      have any resources.  */
 
-  if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT,
-                     REG_OPTION_NON_VOLATILE,
-                     KEY_WRITE, &hrootkey) != ERROR_SUCCESS
-      && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT,
-                        REG_OPTION_NON_VOLATILE,
-                        KEY_WRITE, &hrootkey) != ERROR_SUCCESS)
-    {
-      return FALSE;
-    }
+  if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0,
+                   KEY_WRITE | KEY_QUERY_VALUE, &hrootkey) != ERROR_SUCCESS
+      && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0,
+                      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;
 
-      if (RegSetValueEx (hrootkey, env_vars[i].name,
-                        0, REG_EXPAND_SZ,
-                        value, lstrlen (value) + 1) != ERROR_SUCCESS)
-       ok = FALSE;
+      /* 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);
-
-  return (ok);
 }
 
 int