emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/w32.c


From: Jason Rumney
Subject: [Emacs-diffs] Changes to emacs/src/w32.c
Date: Thu, 14 Jul 2005 18:31:57 -0400

Index: emacs/src/w32.c
diff -c emacs/src/w32.c:1.94 emacs/src/w32.c:1.95
*** emacs/src/w32.c:1.94        Mon Jul  4 16:06:35 2005
--- emacs/src/w32.c     Thu Jul 14 22:31:57 2005
***************
*** 20,27 ****
  
     Geoff Voelker (address@hidden)                         7-29-94
  */
- 
- 
  #include <stddef.h> /* for offsetof */
  #include <stdlib.h>
  #include <stdio.h>
--- 20,25 ----
***************
*** 73,78 ****
--- 71,77 ----
  #define _ANONYMOUS_STRUCT
  #endif
  #include <windows.h>
+ #include <shlobj.h>
  
  #ifdef HAVE_SOCKETS   /* TCP connection support, if kernel can do it */
  #include <sys/socket.h>
***************
*** 100,105 ****
--- 99,107 ----
  #include "w32heap.h"
  #include "systime.h"
  
+ typedef HRESULT (WINAPI * ShGetFolderPath_fn)
+   (IN HWND, IN int, IN HANDLE, IN DWORD, OUT char *);
+ 
  void globals_of_w32 ();
  
  extern Lisp_Object Vw32_downcase_file_names;
***************
*** 903,909 ****
--- 905,913 ----
    static const char * const tempdirs[] = {
      "$TMPDIR", "$TEMP", "$TMP", "c:/"
    };
+ 
    int i;
+ 
    const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]);
  
    /* Make sure they have a usable $TMPDIR.  Many Emacs functions use
***************
*** 942,947 ****
--- 946,953 ----
      LPBYTE lpval;
      DWORD dwType;
      char locale_name[32];
+     struct stat ignored;
+     char default_home[MAX_PATH];
  
      static struct env_entry
      {
***************
*** 963,968 ****
--- 969,1003 ----
        {"TERM", "cmd"},
        {"LANG", NULL},
      };
+ 
+     /* For backwards compatibility, check if a .emacs file exists in C:/
+        If not, then we can try to default to the appdata directory under the
+        user's profile, which is more likely to be writable.   */
+     if (stat ("C:/.emacs", &ignored) < 0)
+     {
+       HRESULT profile_result;
+       /* Dynamically load ShGetFolderPath, as it won't exist on versions
+        of Windows 95 and NT4 that have not been updated to include
+        MSIE 5.  Also we don't link with shell32.dll by default.  */
+       HMODULE shell32_dll;
+       ShGetFolderPath_fn get_folder_path;
+       shell32_dll = GetModuleHandle ("shell32.dll");
+       get_folder_path = (ShGetFolderPath_fn)
+       GetProcAddress (shell32_dll, "SHGetFolderPathA");
+ 
+       if (get_folder_path != NULL)
+       {
+         profile_result = get_folder_path (NULL, CSIDL_APPDATA, NULL,
+                                           0, default_home);
+ 
+         /* If we can't get the appdata dir, revert to old behaviour.  */
+         if (profile_result == S_OK)
+           env_vars[0].def_value = default_home;
+       }
+ 
+       /* Unload shell32.dll, it is not needed anymore.  */
+       FreeLibrary (shell32_dll);
+     }
  
    /* Get default locale info and use it for LANG.  */
    if (GetLocaleInfo (LOCALE_USER_DEFAULT,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]