Unify windows special-dir handling

svn:r2552
This commit is contained in:
Nick Mathewson 2004-10-17 03:38:02 +00:00
parent 376d483d0a
commit 6d1e1b7f46

View File

@ -520,20 +520,24 @@ init_options(or_options_t *options)
options->NumCpus = 1;
}
static char *
get_default_conf_file(void)
{
#ifdef MS_WINDOWS
static char *get_windows_conf_root(void)
{
static int is_set = 0;
static char path[MAX_PATH+1];
LPITEMIDLIST idl;
IMalloc *m;
HRESULT result;
char *path = tor_malloc(MAX_PATH);
if (is_set)
return path;
/* Find X:\documents and settings\username\applicatation data\ .
* We would use SHGetSpecialFolder path, but that wasn't added until IE4.
*/
if (!SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA,
&idl))) {
tor_free(path);
return NULL;
}
/* Convert the path from an "ID List" (whatever that is!) to a path. */
@ -545,9 +549,19 @@ get_default_conf_file(void)
m->lpVtbl->Release(m);
}
if (!SUCCEEDED(result)) {
tor_free(path);
return NULL;
}
is_set = 1;
return path;
}
#endif
static char *
get_default_conf_file(void)
{
#ifdef MS_WINDOWS
char *path = tor_malloc(MAX_PATH);
strlcpy(path, get_windows_conf_root(), MAX_PATH);
strlcat(path,"\\tor\\torrc",MAX_PATH);
return path;
#else
@ -1178,9 +1192,7 @@ get_data_directory(or_options_t *options)
#ifdef MS_WINDOWS
char *p;
p = tor_malloc(MAX_PATH);
if (!SUCCEEDED(SHGetSpecialFolderPath(NULL, p, CSIDL_APPDATA, 1))) {
strlcpy(p,CONFDIR, MAX_PATH);
}
strlcpy(p,get_windows_conf_root(),MAX_PATH);
strlcat(p,"\\tor",MAX_PATH);
options->DataDirectory = p;
return p;