=== modified file 'dcpp/Util.cpp' --- dcpp/Util.cpp 2010-02-11 21:44:13 +0000 +++ dcpp/Util.cpp 2010-03-13 16:05:18 +0000 @@ -103,7 +103,11 @@ #endif -void Util::initialize() { +void Util::initialize(PathsMap overrides) { + static bool initDone = false; + if (initDone) + return; + Text::initialize(); sgenrand((unsigned long)time(NULL)); @@ -153,16 +157,23 @@ paths[PATH_LOCALE] = Text::fromT(buf); #else - paths[PATH_GLOBAL_CONFIG] = "/etc/"; + if (!overrides[PATH_GLOBAL_CONFIG].empty()) + paths[PATH_GLOBAL_CONFIG] = overrides[PATH_GLOBAL_CONFIG]; + else + paths[PATH_GLOBAL_CONFIG] = "/etc/"; + const char* home_ = getenv("HOME"); string home = home_ ? Text::toUtf8(home_) : "/tmp/"; - paths[PATH_USER_CONFIG] = home + "/.dc++/"; + if (!overrides[PATH_USER_CONFIG].empty()) + paths[PATH_USER_CONFIG] = overrides[PATH_USER_CONFIG]; + else + paths[PATH_USER_CONFIG] = home + "/.dc++/"; loadBootConfig(); if(!File::isAbsolute(paths[PATH_USER_CONFIG])) { - paths[PATH_USER_CONFIG] = paths[PATH_GLOBAL_CONFIG] + paths[PATH_USER_CONFIG]; + paths[PATH_USER_CONFIG] = paths[PATH_GLOBAL_CONFIG] + paths[PATH_USER_CONFIG]; // @fixme: Change this to something sensible } paths[PATH_USER_CONFIG] = validateFileName(paths[PATH_USER_CONFIG]); @@ -171,17 +182,32 @@ // @todo implement... } - paths[PATH_USER_LOCAL] = paths[PATH_USER_CONFIG]; + if (!overrides[PATH_USER_LOCAL].empty()) + paths[PATH_USER_LOCAL] = overrides[PATH_USER_LOCAL]; + else + paths[PATH_USER_LOCAL] = paths[PATH_USER_CONFIG]; // @todo paths[PATH_RESOURCES] = ; // @todo paths[PATH_LOCALE] = ; - paths[PATH_DOWNLOADS] = home + "/Downloads/"; + if (!overrides[PATH_DOWNLOADS].empty()) + paths[PATH_DOWNLOADS] = overrides[PATH_DOWNLOADS]; + else + paths[PATH_DOWNLOADS] = home + "/Downloads/"; // @todo: Downloads should be translated or better yet use some 'standard' way to get. #endif - - paths[PATH_FILE_LISTS] = paths[PATH_USER_LOCAL] + "FileLists" PATH_SEPARATOR_STR; - paths[PATH_HUB_LISTS] = paths[PATH_USER_LOCAL] + "HubLists" PATH_SEPARATOR_STR; - paths[PATH_NOTEPAD] = paths[PATH_USER_CONFIG] + "Notepad.txt"; + + if (!overrides[PATH_FILE_LISTS].empty()) + paths[PATH_FILE_LISTS] = overrides[PATH_FILE_LISTS]; + else + paths[PATH_FILE_LISTS] = paths[PATH_USER_LOCAL] + "FileLists" PATH_SEPARATOR_STR; + if (!overrides[PATH_HUB_LISTS].empty()) + paths[PATH_HUB_LISTS] = overrides[PATH_HUB_LISTS]; + else + paths[PATH_HUB_LISTS] = paths[PATH_USER_LOCAL] + "HubLists" PATH_SEPARATOR_STR; + if (!overrides[PATH_NOTEPAD].empty()) + paths[PATH_NOTEPAD] = overrides[PATH_NOTEPAD]; + else + paths[PATH_NOTEPAD] = paths[PATH_USER_CONFIG] + "Notepad.txt"; File::ensureDirectory(paths[PATH_USER_CONFIG]); File::ensureDirectory(paths[PATH_USER_LOCAL]); @@ -227,6 +253,8 @@ } } catch(const FileException&) { } + + initDone = true; } void Util::migrate(const string& file) { === modified file 'dcpp/Util.h' --- dcpp/Util.h 2010-02-11 21:44:13 +0000 +++ dcpp/Util.h 2010-03-13 15:55:30 +0000 @@ -118,7 +118,8 @@ PATH_LAST }; - static void initialize(); + typedef std::map PathsMap; + static void initialize(PathsMap overrides = PathsMap()); /** Path of temporary storage */ static string getTempPath() {