|
|
@ -25,8 +25,8 @@ |
|
|
|
#define LOCAL_DB_FILENAME "management.db"
|
|
|
|
#define SYSTEM_DB_FILENAME "system.db"
|
|
|
|
#define KEYS_DB "keys.db"
|
|
|
|
#define USER_FOLDER_PATH pEpUserFolderPath().c_str()
|
|
|
|
#define SYSTEM_FOLDER_PATH pEpSystemFolderPath().c_str()
|
|
|
|
#define USER_FOLDER_PATH _per_user_directory()
|
|
|
|
#define SYSTEM_FOLDER_PATH _per_machine_directory()
|
|
|
|
|
|
|
|
#ifndef WC_ERR_INVALID_CHARS
|
|
|
|
#define WC_ERR_INVALID_CHARS 0x00000080 // error for invalid chars
|
|
|
@ -140,72 +140,68 @@ static inline string managementPath(const char *file_path, const char *file_name |
|
|
|
return path; |
|
|
|
} |
|
|
|
|
|
|
|
static inline string pEpSystemFolderPath(void) |
|
|
|
const char *_per_machine_directory(void) |
|
|
|
{ |
|
|
|
static TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
string path = PER_MACHINE_DIRECTORY; |
|
|
|
static string path; |
|
|
|
if (path.length()) |
|
|
|
return path.c_str(); |
|
|
|
|
|
|
|
TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
|
|
|
|
// Get SystemFolder Registry value and use if available
|
|
|
|
bool result = readRegistryString(HKEY_CURRENT_USER, |
|
|
|
TEXT("SOFTWARE\\pEp"), TEXT("SystemFolder"), tPath, |
|
|
|
PATH_BUF_SIZE, NULL); |
|
|
|
|
|
|
|
if (result) |
|
|
|
path = utf8_string(tPath); |
|
|
|
// If not Registry value was found, use default
|
|
|
|
if (!result) { |
|
|
|
DWORD length = ExpandEnvironmentStringsW(utf16_string(string(PER_MACHINE_DIRECTORY)).c_str(), |
|
|
|
tPath, PATH_BUF_SIZE); |
|
|
|
assert(length); |
|
|
|
if (length == 0) |
|
|
|
throw bad_alloc(); // BUG: there are other errors possible beside out of memory
|
|
|
|
} |
|
|
|
|
|
|
|
return path; |
|
|
|
path = utf8_string(wstring(tPath)); |
|
|
|
return path.c_str(); |
|
|
|
} |
|
|
|
|
|
|
|
static inline string pEpUserFolderPath(void) |
|
|
|
const char *_per_user_directory(void) |
|
|
|
{ |
|
|
|
static TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
string path = PER_USER_DIRECTORY; |
|
|
|
static string path; |
|
|
|
if (path.length()) |
|
|
|
return path.c_str(); |
|
|
|
|
|
|
|
TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
|
|
|
|
// Get UserFolder Registry value and use if available
|
|
|
|
bool result = readRegistryString(HKEY_CURRENT_USER, |
|
|
|
TEXT("SOFTWARE\\pEp"), TEXT("UserFolder"), tPath, |
|
|
|
PATH_BUF_SIZE, NULL); |
|
|
|
|
|
|
|
if (result) |
|
|
|
path = utf8_string(tPath); |
|
|
|
|
|
|
|
return path; |
|
|
|
// If not Registry value was found, use default
|
|
|
|
if (!result) { |
|
|
|
DWORD length = ExpandEnvironmentStringsW(utf16_string(string(PER_USER_DIRECTORY)).c_str(), |
|
|
|
tPath, PATH_BUF_SIZE); |
|
|
|
assert(length); |
|
|
|
if (length == 0) |
|
|
|
throw bad_alloc(); // BUG: there are other errors possible beside out of memory
|
|
|
|
} |
|
|
|
|
|
|
|
path = utf8_string(wstring(tPath)); |
|
|
|
return path.c_str(); |
|
|
|
} |
|
|
|
|
|
|
|
extern "C" { |
|
|
|
|
|
|
|
DYNAMIC_API const char *per_user_directory(void) |
|
|
|
{ |
|
|
|
static string path; |
|
|
|
if (path.length()) |
|
|
|
return path.c_str(); |
|
|
|
|
|
|
|
TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
DWORD length = ExpandEnvironmentStringsW(utf16_string(string(PER_USER_DIRECTORY)).c_str(), |
|
|
|
tPath, PATH_BUF_SIZE); |
|
|
|
assert(length); |
|
|
|
if (length == 0) |
|
|
|
throw bad_alloc(); // BUG: there are other errors possible beside out of memory
|
|
|
|
|
|
|
|
path = utf8_string(wstring(tPath)); |
|
|
|
return path.c_str(); |
|
|
|
return _per_user_directory(); |
|
|
|
} |
|
|
|
|
|
|
|
DYNAMIC_API const char *per_machine_directory(void) |
|
|
|
{ |
|
|
|
static string path; |
|
|
|
if (path.length()) |
|
|
|
return path.c_str(); |
|
|
|
|
|
|
|
TCHAR tPath[PATH_BUF_SIZE]; |
|
|
|
DWORD length = ExpandEnvironmentStringsW(utf16_string(string(PER_MACHINE_DIRECTORY)).c_str(), |
|
|
|
tPath, PATH_BUF_SIZE); |
|
|
|
assert(length); |
|
|
|
if (length == 0) |
|
|
|
throw bad_alloc(); // BUG: there are other errors possible beside out of memory
|
|
|
|
|
|
|
|
path = utf8_string(wstring(tPath)); |
|
|
|
return path.c_str(); |
|
|
|
return _per_machine_directory(); |
|
|
|
} |
|
|
|
|
|
|
|
void *dlopen(const char *filename, int flag) { |
|
|
@ -278,7 +274,7 @@ const char *windoze_keys_db(void) { |
|
|
|
const char *windoze_local_db(void) { |
|
|
|
static string path; |
|
|
|
if (path.length() == 0) |
|
|
|
path = managementPath(PER_USER_DIRECTORY, LOCAL_DB_FILENAME); |
|
|
|
path = managementPath(USER_FOLDER_PATH, LOCAL_DB_FILENAME); |
|
|
|
return path.c_str(); |
|
|
|
} |
|
|
|
|
|
|
|