| 84 | } |
| 85 | |
| 86 | void DetectDataDir(const std::string & cmdline_param, bool isService) { |
| 87 | // with 'datadir' option |
| 88 | if (cmdline_param != "") { |
| 89 | dataDir = cmdline_param; |
| 90 | return; |
| 91 | } |
| 92 | |
| 93 | #if !defined(MAC_OSX) && !defined(ANDROID) |
| 94 | // with 'service' option |
| 95 | if (isService) { |
| 96 | #ifdef _WIN32 |
| 97 | wchar_t commonAppData[MAX_PATH]; |
| 98 | if(SHGetFolderPathW(NULL, CSIDL_COMMON_APPDATA, NULL, 0, commonAppData) != S_OK) |
| 99 | { |
| 100 | #ifdef WIN32_APP |
| 101 | MessageBox(NULL, TEXT("Unable to get common AppData path!"), TEXT("I2Pd: error"), MB_ICONERROR | MB_OK); |
| 102 | #else |
| 103 | fprintf(stderr, "Error: Unable to get common AppData path!"); |
| 104 | #endif |
| 105 | exit(1); |
| 106 | } |
| 107 | else |
| 108 | { |
| 109 | #if ((BOOST_VERSION >= 108500) || STD_FILESYSTEM) |
| 110 | dataDir = fs_lib::path(commonAppData).string() + "\\" + appName; |
| 111 | #else |
| 112 | dataDir = fs_lib::wpath(commonAppData).string() + "\\" + appName; |
| 113 | #endif |
| 114 | } |
| 115 | #else |
| 116 | dataDir = "/var/lib/" + appName; |
| 117 | #endif |
| 118 | return; |
| 119 | } |
| 120 | #endif |
| 121 | |
| 122 | // detect directory as usual |
| 123 | #ifdef _WIN32 |
| 124 | wchar_t localAppData[MAX_PATH]; |
| 125 | |
| 126 | // check executable directory first |
| 127 | if(!GetModuleFileNameW(NULL, localAppData, MAX_PATH)) |
| 128 | { |
| 129 | #ifdef WIN32_APP |
| 130 | MessageBox(NULL, TEXT("Unable to get application path!"), TEXT("I2Pd: error"), MB_ICONERROR | MB_OK); |
| 131 | #else |
| 132 | fprintf(stderr, "Error: Unable to get application path!"); |
| 133 | #endif |
| 134 | exit(1); |
| 135 | } |
| 136 | else |
| 137 | { |
| 138 | #if ((BOOST_VERSION >= 108500) || STD_FILESYSTEM) |
| 139 | auto execPath = fs_lib::path(localAppData).parent_path(); |
| 140 | #else |
| 141 | auto execPath = fs_lib::wpath(localAppData).parent_path(); |
| 142 | #endif |
| 143 | |