(init_environment): Default HOME directory to user's
appdata directory if possible.
This commit is contained in:
parent
58ba2f8f07
commit
2d5324c520
2 changed files with 42 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
2005-07-14 Jason Rumney <jasonr@gnu.org>
|
||||
|
||||
* w32.c (init_environment): Default HOME directory to user's
|
||||
appdata directory if possible.
|
||||
|
||||
2005-07-14 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* .gdbinit (pitx): Fix output format. Print string charpos.
|
||||
|
|
39
src/w32.c
39
src/w32.c
|
@ -20,8 +20,6 @@ Boston, MA 02110-1301, USA.
|
|||
|
||||
Geoff Voelker (voelker@cs.washington.edu) 7-29-94
|
||||
*/
|
||||
|
||||
|
||||
#include <stddef.h> /* for offsetof */
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -73,6 +71,7 @@ Boston, MA 02110-1301, USA.
|
|||
#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,6 +99,9 @@ Boston, MA 02110-1301, USA.
|
|||
#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,7 +905,9 @@ init_environment (char ** argv)
|
|||
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,6 +946,8 @@ init_environment (char ** argv)
|
|||
LPBYTE lpval;
|
||||
DWORD dwType;
|
||||
char locale_name[32];
|
||||
struct stat ignored;
|
||||
char default_home[MAX_PATH];
|
||||
|
||||
static struct env_entry
|
||||
{
|
||||
|
@ -964,6 +970,35 @@ init_environment (char ** argv)
|
|||
{"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,
|
||||
LOCALE_SABBREVLANGNAME | LOCALE_USE_CP_ACP,
|
||||
|
|
Loading…
Add table
Reference in a new issue