Browse Source

Make windows fall back to CWD if SHGetSpecialFolderLocation is borked

svn:r2578
Nick Mathewson 21 years ago
parent
commit
78a2c3aa39
1 changed files with 6 additions and 3 deletions
  1. 6 3
      src/or/config.c

+ 6 - 3
src/or/config.c

@@ -538,7 +538,10 @@ static char *get_windows_conf_root(void)
    */
    */
   if (!SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA,
   if (!SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA,
                                             &idl))) {
                                             &idl))) {
-    return NULL;
+    GetCurrentDirectory(MAX_PATH, path);
+    is_set = 1;
+    log_fn(LOG_WARN, "I couldn't find your application data folder: are you running an ancient version of Windows 95? Defaulting to '%s'", path);
+    return path;
   }
   }
   /* Convert the path from an "ID List" (whatever that is!) to a path. */
   /* Convert the path from an "ID List" (whatever that is!) to a path. */
   result = SHGetPathFromIDList(idl, path);
   result = SHGetPathFromIDList(idl, path);
@@ -551,6 +554,7 @@ static char *get_windows_conf_root(void)
   if (!SUCCEEDED(result)) {
   if (!SUCCEEDED(result)) {
     return NULL;
     return NULL;
   }
   }
+  strlcat(p,"\\tor",MAX_PATH);
   is_set = 1;
   is_set = 1;
   return path;
   return path;
 }
 }
@@ -562,7 +566,7 @@ get_default_conf_file(void)
 #ifdef MS_WINDOWS
 #ifdef MS_WINDOWS
   char *path = tor_malloc(MAX_PATH);
   char *path = tor_malloc(MAX_PATH);
   strlcpy(path, get_windows_conf_root(), MAX_PATH);
   strlcpy(path, get_windows_conf_root(), MAX_PATH);
-  strlcat(path,"\\tor\\torrc",MAX_PATH);
+  strlcat(path,"\\torrc",MAX_PATH);
   return path;
   return path;
 #else
 #else
   return tor_strdup(CONFDIR "/torrc");
   return tor_strdup(CONFDIR "/torrc");
@@ -1199,7 +1203,6 @@ get_data_directory(or_options_t *options)
     char *p;
     char *p;
     p = tor_malloc(MAX_PATH);
     p = tor_malloc(MAX_PATH);
     strlcpy(p,get_windows_conf_root(),MAX_PATH);
     strlcpy(p,get_windows_conf_root(),MAX_PATH);
-    strlcat(p,"\\tor",MAX_PATH);
     options->DataDirectory = p;
     options->DataDirectory = p;
     return p;
     return p;
 #else
 #else