summaryrefslogtreecommitdiff
path: root/libpurple/win32/win32dep.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/win32/win32dep.c')
-rw-r--r--libpurple/win32/win32dep.c164
1 files changed, 43 insertions, 121 deletions
diff --git a/libpurple/win32/win32dep.c b/libpurple/win32/win32dep.c
index 38f76e46f2..6ac3d01e8f 100644
--- a/libpurple/win32/win32dep.c
+++ b/libpurple/win32/win32dep.c
@@ -115,7 +115,6 @@ FARPROC wpurple_find_and_loadproc(const char *dllname, const char *procedure) {
/* Get paths to special Windows folders. */
gchar *wpurple_get_special_folder(int folder_type) {
- static LPFNSHGETFOLDERPATHA MySHGetFolderPathA = NULL;
static LPFNSHGETFOLDERPATHW MySHGetFolderPathW = NULL;
gchar *retval = NULL;
@@ -133,21 +132,6 @@ gchar *wpurple_get_special_folder(int folder_type) {
}
}
- if (!retval) {
- if (!MySHGetFolderPathA) {
- MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA)
- wpurple_find_and_loadproc("shfolder.dll", "SHGetFolderPathA");
- }
- if (MySHGetFolderPathA) {
- char locale_dir[MAX_PATH + 1];
-
- if (SUCCEEDED(MySHGetFolderPathA(NULL, folder_type, NULL,
- SHGFP_TYPE_CURRENT, locale_dir))) {
- retval = g_locale_to_utf8(locale_dir, -1, NULL, NULL, NULL);
- }
- }
- }
-
return retval;
}
@@ -156,20 +140,11 @@ const char *wpurple_install_dir(void) {
if (!initialized) {
char *tmp = NULL;
- if (G_WIN32_HAVE_WIDECHAR_API()) {
- wchar_t winstall_dir[MAXPATHLEN];
- if (GetModuleFileNameW(NULL, winstall_dir,
- MAXPATHLEN) > 0) {
- tmp = g_utf16_to_utf8(winstall_dir, -1,
- NULL, NULL, NULL);
- }
- } else {
- gchar cpinstall_dir[MAXPATHLEN];
- if (GetModuleFileNameA(NULL, cpinstall_dir,
- MAXPATHLEN) > 0) {
- tmp = g_locale_to_utf8(cpinstall_dir,
- -1, NULL, NULL, NULL);
- }
+ wchar_t winstall_dir[MAXPATHLEN];
+ if (GetModuleFileNameW(NULL, winstall_dir,
+ MAXPATHLEN) > 0) {
+ tmp = g_utf16_to_utf8(winstall_dir, -1,
+ NULL, NULL, NULL);
}
if (tmp == NULL) {
@@ -246,61 +221,33 @@ gboolean wpurple_write_reg_string(HKEY rootkey, const char *subkey, const char *
HKEY reg_key;
gboolean success = FALSE;
- if(G_WIN32_HAVE_WIDECHAR_API()) {
- wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
- NULL, NULL);
-
- if(RegOpenKeyExW(rootkey, wc_subkey, 0,
- KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
- wchar_t *wc_valname = NULL;
+ wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
+ NULL, NULL);
- if (valname)
- wc_valname = g_utf8_to_utf16(valname, -1,
- NULL, NULL, NULL);
+ if(RegOpenKeyExW(rootkey, wc_subkey, 0,
+ KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
+ wchar_t *wc_valname = NULL;
- if(value) {
- wchar_t *wc_value = g_utf8_to_utf16(value, -1,
- NULL, NULL, NULL);
- int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1;
- if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ,
- (LPBYTE)wc_value, len
- ) == ERROR_SUCCESS)
- success = TRUE;
- g_free(wc_value);
- } else
- if(RegDeleteValueW(reg_key, wc_valname) == ERROR_SUCCESS)
- success = TRUE;
-
- g_free(wc_valname);
- }
- g_free(wc_subkey);
- } else {
- char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
- NULL, NULL);
- if(RegOpenKeyExA(rootkey, cp_subkey, 0,
- KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
- char *cp_valname = NULL;
- if(valname)
- cp_valname = g_locale_from_utf8(valname, -1,
- NULL, NULL, NULL);
+ if (valname)
+ wc_valname = g_utf8_to_utf16(valname, -1,
+ NULL, NULL, NULL);
+
+ if(value) {
+ wchar_t *wc_value = g_utf8_to_utf16(value, -1,
+ NULL, NULL, NULL);
+ int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1;
+ if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ,
+ (LPBYTE)wc_value, len
+ ) == ERROR_SUCCESS)
+ success = TRUE;
+ g_free(wc_value);
+ } else
+ if(RegDeleteValueW(reg_key, wc_valname) == ERROR_SUCCESS)
+ success = TRUE;
- if (value) {
- char *cp_value = g_locale_from_utf8(value, -1,
- NULL, NULL, NULL);
- int len = strlen(cp_value) + 1;
- if(RegSetValueExA(reg_key, cp_valname, 0, REG_SZ,
- cp_value, len
- ) == ERROR_SUCCESS)
- success = TRUE;
- g_free(cp_value);
- } else
- if(RegDeleteValueA(reg_key, cp_valname) == ERROR_SUCCESS)
- success = TRUE;
-
- g_free(cp_valname);
- }
- g_free(cp_subkey);
+ g_free(wc_valname);
}
+ g_free(wc_subkey);
if(reg_key != NULL)
RegCloseKey(reg_key);
@@ -312,17 +259,11 @@ static HKEY _reg_open_key(HKEY rootkey, const char *subkey, REGSAM access) {
HKEY reg_key = NULL;
LONG rv;
- if(G_WIN32_HAVE_WIDECHAR_API()) {
- wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
- NULL, NULL);
- rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, &reg_key);
- g_free(wc_subkey);
- } else {
- char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
- NULL, NULL);
- rv = RegOpenKeyExA(rootkey, cp_subkey, 0, access, &reg_key);
- g_free(cp_subkey);
- }
+ wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
+ NULL, NULL);
+ rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, &reg_key);
+
+ g_free(wc_subkey);
if (rv != ERROR_SUCCESS) {
char *errmsg = g_win32_error_message(rv);
@@ -340,19 +281,11 @@ static HKEY _reg_open_key(HKEY rootkey, const char *subkey, REGSAM access) {
static gboolean _reg_read(HKEY reg_key, const char *valname, LPDWORD type, LPBYTE data, LPDWORD data_len) {
LONG rv;
- if(G_WIN32_HAVE_WIDECHAR_API()) {
- wchar_t *wc_valname = NULL;
- if (valname)
- wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL);
- rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len);
- g_free(wc_valname);
- } else {
- char *cp_valname = NULL;
- if(valname)
- cp_valname = g_locale_from_utf8(valname, -1, NULL, NULL, NULL);
- rv = RegQueryValueExA(reg_key, cp_valname, 0, type, data, data_len);
- g_free(cp_valname);
- }
+ wchar_t *wc_valname = NULL;
+ if (valname)
+ wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL);
+ rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len);
+ g_free(wc_valname);
if (rv != ERROR_SUCCESS) {
char *errmsg = g_win32_error_message(rv);
@@ -389,24 +322,13 @@ char *wpurple_read_reg_string(HKEY rootkey, const char *subkey, const char *valn
if(reg_key) {
if(_reg_read(reg_key, valname, &type, NULL, &nbytes) && type == REG_SZ) {
- LPBYTE data;
- if(G_WIN32_HAVE_WIDECHAR_API())
- data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1);
- else
- data = (LPBYTE) g_malloc(nbytes + 1);
+ LPBYTE data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1);
if(_reg_read(reg_key, valname, &type, data, &nbytes)) {
- if(G_WIN32_HAVE_WIDECHAR_API()) {
- wchar_t *wc_temp = (wchar_t*) data;
- wc_temp[nbytes / sizeof(wchar_t)] = '\0';
- result = g_utf16_to_utf8(wc_temp, -1,
- NULL, NULL, NULL);
- } else {
- char *cp_temp = (char*) data;
- cp_temp[nbytes] = '\0';
- result = g_locale_to_utf8(cp_temp, -1,
- NULL, NULL, NULL);
- }
+ wchar_t *wc_temp = (wchar_t*) data;
+ wc_temp[nbytes / sizeof(wchar_t)] = '\0';
+ result = g_utf16_to_utf8(wc_temp, -1,
+ NULL, NULL, NULL);
}
g_free(data);
}