libpurple/win32/win32dep.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26745
c51eb424a60c
child 27497
2dc5a0e0c4c2
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
2 * purple
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
3 *
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
4 * File: win32dep.c
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
5 * Date: June, 2002
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
6 * Description: Windows dependant code for Purple
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
7 *
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
8 * Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com>
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 *
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
10 * This program is free software; you can redistribute it and/or modify
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
11 * it under the terms of the GNU General Public License as published by
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
13 * (at your option) any later version.
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
14 *
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
15 * This program is distributed in the hope that it will be useful,
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
18 * GNU General Public License for more details.
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
19 *
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
20 * You should have received a copy of the GNU General Public License
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
21 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18633
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
23 *
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 */
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
25 #define _WIN32_IE 0x500
22869
3fc7a5fc49eb Include winsock2.h before windows.h is included to avoid winsock.h being
Daniel Atallah <datallah@pidgin.im>
parents: 22687
diff changeset
26 #include "internal.h"
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
27 #include <winuser.h>
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
28
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
29 #include "debug.h"
6929
47829b408f9d [gaim-migrate @ 7476]
Herman Bloggs <herman@bluedigits.com>
parents: 6890
diff changeset
30 #include "notify.h"
5913
4d016c00bb36 [gaim-migrate @ 6345]
Herman Bloggs <herman@bluedigits.com>
parents: 5854
diff changeset
31
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 /*
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
33 * DEFINES & MACROS
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
34 */
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
35
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
36 /* For shfolder.dll */
10589
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10335
diff changeset
37 typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR);
4e10236e06d4 [gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents: 10335
diff changeset
38 typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHW)(HWND, int, HANDLE, DWORD, LPWSTR);
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
39
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
40 /*
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
41 * LOCALS
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42 */
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
43 static char *app_data_dir = NULL, *install_dir = NULL,
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
44 *lib_dir = NULL, *locale_dir = NULL;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
46 static HINSTANCE libpurpledll_hInstance = 0;
6848
ca91f08b60df [gaim-migrate @ 7393]
Herman Bloggs <herman@bluedigits.com>
parents: 6816
diff changeset
47
4097
3ad9e41eb933 [gaim-migrate @ 4312]
Herman Bloggs <herman@bluedigits.com>
parents: 4042
diff changeset
48 /*
3ad9e41eb933 [gaim-migrate @ 4312]
Herman Bloggs <herman@bluedigits.com>
parents: 4042
diff changeset
49 * PUBLIC CODE
3ad9e41eb933 [gaim-migrate @ 4312]
Herman Bloggs <herman@bluedigits.com>
parents: 4042
diff changeset
50 */
3ad9e41eb933 [gaim-migrate @ 4312]
Herman Bloggs <herman@bluedigits.com>
parents: 4042
diff changeset
51
4406
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
52 /* Escape windows dir separators. This is needed when paths are saved,
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
53 and on being read back have their '\' chars used as an escape char.
4555
3ff630a3045a [gaim-migrate @ 4835]
Herman Bloggs <herman@bluedigits.com>
parents: 4535
diff changeset
54 Returns an allocated string which needs to be freed.
4406
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
55 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
56 char *wpurple_escape_dirsep(const char *filename) {
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
57 int sepcount = 0;
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
58 const char *tmp = filename;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
59 char *ret;
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
60 int cnt = 0;
4406
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
61
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
62 g_return_val_if_fail(filename != NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
63
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
64 while(*tmp) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
65 if(*tmp == '\\')
4406
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
66 sepcount++;
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
67 tmp++;
4406
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
68 }
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
69 ret = g_malloc0(strlen(filename) + sepcount + 1);
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
70 while(*filename) {
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
71 ret[cnt] = *filename;
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
72 if(*filename == '\\')
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
73 ret[++cnt] = '\\';
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
74 filename++;
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
75 cnt++;
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
76 }
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
77 ret[cnt] = '\0';
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
78 return ret;
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
79 }
a7d91dbcdae8 [gaim-migrate @ 4675]
Herman Bloggs <herman@bluedigits.com>
parents: 4168
diff changeset
80
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
81 /* Determine whether the specified dll contains the specified procedure.
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
82 If so, load it (if not already loaded). */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
83 FARPROC wpurple_find_and_loadproc(const char *dllname, const char *procedure) {
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
84 HMODULE hmod;
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
85 BOOL did_load = FALSE;
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
86 FARPROC proc = 0;
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
87
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
88 if(!(hmod = GetModuleHandle(dllname))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
89 purple_debug_warning("wpurple", "%s not already loaded; loading it...\n", dllname);
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
90 if(!(hmod = LoadLibrary(dllname))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
91 purple_debug_error("wpurple", "Could not load: %s\n", dllname);
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
92 return NULL;
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
93 }
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
94 else
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
95 did_load = TRUE;
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
96 }
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
97
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
98 if((proc = GetProcAddress(hmod, procedure))) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
99 purple_debug_info("wpurple", "This version of %s contains %s\n",
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
100 dllname, procedure);
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
101 return proc;
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
102 }
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
103 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
104 purple_debug_warning("wpurple", "Function %s not found in dll %s\n",
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
105 procedure, dllname);
3983
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
106 if(did_load) {
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
107 /* unload dll */
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
108 FreeLibrary(hmod);
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
109 }
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
110 return NULL;
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
111 }
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
112 }
fd54b7e2b090 [gaim-migrate @ 4174]
Herman Bloggs <herman@bluedigits.com>
parents: 3973
diff changeset
113
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
114 /* Determine Purple Paths during Runtime */
3856
db98b5201da8 [gaim-migrate @ 4008]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
115
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
116 /* Get paths to special Windows folders. */
22687
3cb9f701d421 printf format warning fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 21106
diff changeset
117 gchar *wpurple_get_special_folder(int folder_type) {
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
118 static LPFNSHGETFOLDERPATHA MySHGetFolderPathA = NULL;
13781
d8cf4ef72be0 [gaim-migrate @ 16191]
Ma Xuan <supermmx@gmail.com>
parents: 13615
diff changeset
119 static LPFNSHGETFOLDERPATHW MySHGetFolderPathW = NULL;
22687
3cb9f701d421 printf format warning fixes.
Daniel Atallah <datallah@pidgin.im>
parents: 21106
diff changeset
120 gchar *retval = NULL;
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
121
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
122 if (!MySHGetFolderPathW) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
123 MySHGetFolderPathW = (LPFNSHGETFOLDERPATHW)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
124 wpurple_find_and_loadproc("shfolder.dll", "SHGetFolderPathW");
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
125 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
126
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
127 if (MySHGetFolderPathW) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
128 wchar_t utf_16_dir[MAX_PATH + 1];
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
129
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
130 if (SUCCEEDED(MySHGetFolderPathW(NULL, folder_type, NULL,
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
131 SHGFP_TYPE_CURRENT, utf_16_dir))) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
132 retval = g_utf16_to_utf8(utf_16_dir, -1, NULL, NULL, NULL);
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
133 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
134 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
135
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
136 if (!retval) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
137 if (!MySHGetFolderPathA) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
138 MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
139 wpurple_find_and_loadproc("shfolder.dll", "SHGetFolderPathA");
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
140 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
141 if (MySHGetFolderPathA) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
142 char locale_dir[MAX_PATH + 1];
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
143
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
144 if (SUCCEEDED(MySHGetFolderPathA(NULL, folder_type, NULL,
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
145 SHGFP_TYPE_CURRENT, locale_dir))) {
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
146 retval = g_locale_to_utf8(locale_dir, -1, NULL, NULL, NULL);
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
147 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
148 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
149 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
150
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
151 return retval;
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
152 }
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
153
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
154 const char *wpurple_install_dir(void) {
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
155 static gboolean initialized = FALSE;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
156
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
157 if (!initialized) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
158 char *tmp = NULL;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
159 if (G_WIN32_HAVE_WIDECHAR_API()) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
160 wchar_t winstall_dir[MAXPATHLEN];
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
161 if (GetModuleFileNameW(NULL, winstall_dir,
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
162 MAXPATHLEN) > 0) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
163 tmp = g_utf16_to_utf8(winstall_dir, -1,
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
164 NULL, NULL, NULL);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
165 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
166 } else {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
167 gchar cpinstall_dir[MAXPATHLEN];
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
168 if (GetModuleFileNameA(NULL, cpinstall_dir,
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
169 MAXPATHLEN) > 0) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
170 tmp = g_locale_to_utf8(cpinstall_dir,
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
171 -1, NULL, NULL, NULL);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
172 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
173 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
174
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
175 if (tmp == NULL) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
176 tmp = g_win32_error_message(GetLastError());
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
177 purple_debug_error("wpurple",
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
178 "GetModuleFileName error: %s\n", tmp);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
179 g_free(tmp);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
180 return NULL;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
181 } else {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
182 install_dir = g_path_get_dirname(tmp);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
183 g_free(tmp);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
184 initialized = TRUE;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
185 }
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
186 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
187
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
188 return install_dir;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
189 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
190
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
191 const char *wpurple_lib_dir(void) {
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
192 static gboolean initialized = FALSE;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
193
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
194 if (!initialized) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
195 const char *inst_dir = wpurple_install_dir();
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
196 if (inst_dir != NULL) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
197 lib_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "plugins", inst_dir);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
198 initialized = TRUE;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
199 } else {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
200 return NULL;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
201 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
202 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
203
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
204 return lib_dir;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
205 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
206
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
207 const char *wpurple_locale_dir(void) {
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
208 static gboolean initialized = FALSE;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
209
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
210 if (!initialized) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
211 const char *inst_dir = wpurple_install_dir();
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
212 if (inst_dir != NULL) {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
213 locale_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "locale", inst_dir);
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
214 initialized = TRUE;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
215 } else {
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
216 return NULL;
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
217 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
218 }
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
219
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
220 return locale_dir;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
221 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
222
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
223 const char *wpurple_data_dir(void) {
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
224
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
225 if (!app_data_dir) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
226 /* Set app data dir, used by purple_home_dir */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
227 const char *newenv = g_getenv("PURPLEHOME");
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
228 if (newenv)
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
229 app_data_dir = g_strdup(newenv);
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
230 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
231 app_data_dir = wpurple_get_special_folder(CSIDL_APPDATA);
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
232 if (!app_data_dir)
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
233 app_data_dir = g_strdup("C:");
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
234 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
235 purple_debug_info("wpurple", "Purple settings dir: %s\n",
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
236 app_data_dir);
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
237 }
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
238
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
239 return app_data_dir;
6848
ca91f08b60df [gaim-migrate @ 7393]
Herman Bloggs <herman@bluedigits.com>
parents: 6816
diff changeset
240 }
ca91f08b60df [gaim-migrate @ 7393]
Herman Bloggs <herman@bluedigits.com>
parents: 6816
diff changeset
241
3973
acade2595b85 [gaim-migrate @ 4157]
Herman Bloggs <herman@bluedigits.com>
parents: 3950
diff changeset
242 /* Miscellaneous */
acade2595b85 [gaim-migrate @ 4157]
Herman Bloggs <herman@bluedigits.com>
parents: 3950
diff changeset
243
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
244 gboolean wpurple_write_reg_string(HKEY rootkey, const char *subkey, const char *valname,
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
245 const char *value) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
246 HKEY reg_key;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
247 gboolean success = FALSE;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
248
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
249 if(G_WIN32_HAVE_WIDECHAR_API()) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
250 wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
251 NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
252
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
253 if(RegOpenKeyExW(rootkey, wc_subkey, 0,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
254 KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
255 wchar_t *wc_valname = NULL;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
256
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
257 if (valname)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
258 wc_valname = g_utf8_to_utf16(valname, -1,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
259 NULL, NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
260
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
261 if(value) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
262 wchar_t *wc_value = g_utf8_to_utf16(value, -1,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
263 NULL, NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
264 int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
265 if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
266 (LPBYTE)wc_value, len
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
267 ) == ERROR_SUCCESS)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
268 success = TRUE;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
269 g_free(wc_value);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
270 } else
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
271 if(RegDeleteValueW(reg_key, wc_valname) == ERROR_SUCCESS)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
272 success = TRUE;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
273
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
274 g_free(wc_valname);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
275 }
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
276 g_free(wc_subkey);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
277 } else {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
278 char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
279 NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
280 if(RegOpenKeyExA(rootkey, cp_subkey, 0,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
281 KEY_SET_VALUE, &reg_key) == ERROR_SUCCESS) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
282 char *cp_valname = NULL;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
283 if(valname)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
284 cp_valname = g_locale_from_utf8(valname, -1,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
285 NULL, NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
286
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
287 if (value) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
288 char *cp_value = g_locale_from_utf8(value, -1,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
289 NULL, NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
290 int len = strlen(cp_value) + 1;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
291 if(RegSetValueExA(reg_key, cp_valname, 0, REG_SZ,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
292 cp_value, len
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
293 ) == ERROR_SUCCESS)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
294 success = TRUE;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
295 g_free(cp_value);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
296 } else
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
297 if(RegDeleteValueA(reg_key, cp_valname) == ERROR_SUCCESS)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
298 success = TRUE;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
299
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
300 g_free(cp_valname);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
301 }
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
302 g_free(cp_subkey);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
303 }
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
304
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
305 if(reg_key != NULL)
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
306 RegCloseKey(reg_key);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
307
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
308 return success;
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
309 }
6437
809e9334e31f [gaim-migrate @ 6945]
Herman Bloggs <herman@bluedigits.com>
parents: 6425
diff changeset
310
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
311 static HKEY _reg_open_key(HKEY rootkey, const char *subkey, REGSAM access) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
312 HKEY reg_key = NULL;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
313 LONG rv;
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
314
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
315 if(G_WIN32_HAVE_WIDECHAR_API()) {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
316 wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
317 NULL, NULL);
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
318 rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, &reg_key);
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
319 g_free(wc_subkey);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
320 } else {
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
321 char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
322 NULL, NULL);
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
323 rv = RegOpenKeyExA(rootkey, cp_subkey, 0, access, &reg_key);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
324 g_free(cp_subkey);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
325 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
326
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
327 if (rv != ERROR_SUCCESS) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
328 char *errmsg = g_win32_error_message(rv);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
329 purple_debug_info("wpurple", "Could not open reg key '%s' subkey '%s'.\nMessage: (%ld) %s\n",
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
330 ((rootkey == HKEY_LOCAL_MACHINE) ? "HKLM" :
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
331 (rootkey == HKEY_CURRENT_USER) ? "HKCU" :
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
332 (rootkey == HKEY_CLASSES_ROOT) ? "HKCR" : "???"),
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
333 subkey, rv, errmsg);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
334 g_free(errmsg);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
335 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
336
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
337 return reg_key;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
338 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
339
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
340 static gboolean _reg_read(HKEY reg_key, const char *valname, LPDWORD type, LPBYTE data, LPDWORD data_len) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
341 LONG rv;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
342
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
343 if(G_WIN32_HAVE_WIDECHAR_API()) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
344 wchar_t *wc_valname = NULL;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
345 if (valname)
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
346 wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
347 rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
348 g_free(wc_valname);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
349 } else {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
350 char *cp_valname = NULL;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
351 if(valname)
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
352 cp_valname = g_locale_from_utf8(valname, -1, NULL, NULL, NULL);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
353 rv = RegQueryValueExA(reg_key, cp_valname, 0, type, data, data_len);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
354 g_free(cp_valname);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
355 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
356
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
357 if (rv != ERROR_SUCCESS) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
358 char *errmsg = g_win32_error_message(rv);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
359 purple_debug_info("wpurple", "Could not read from reg key value '%s'.\nMessage: (%ld) %s\n",
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
360 valname, rv, errmsg);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
361 g_free(errmsg);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
362 }
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
363
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
364 return (rv == ERROR_SUCCESS);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
365 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
366
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
367 gboolean wpurple_read_reg_dword(HKEY rootkey, const char *subkey, const char *valname, LPDWORD result) {
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
368
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
369 DWORD type;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
370 DWORD nbytes;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
371 HKEY reg_key = _reg_open_key(rootkey, subkey, KEY_QUERY_VALUE);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
372 gboolean success = FALSE;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
373
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
374 if(reg_key) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
375 if(_reg_read(reg_key, valname, &type, (LPBYTE)result, &nbytes))
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
376 success = TRUE;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
377 RegCloseKey(reg_key);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
378 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
379
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
380 return success;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
381 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
382
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
383 char *wpurple_read_reg_string(HKEY rootkey, const char *subkey, const char *valname) {
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
384
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
385 DWORD type;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
386 DWORD nbytes;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
387 HKEY reg_key = _reg_open_key(rootkey, subkey, KEY_QUERY_VALUE);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
388 char *result = NULL;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
389
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
390 if(reg_key) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
391 if(_reg_read(reg_key, valname, &type, NULL, &nbytes) && type == REG_SZ) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
392 LPBYTE data;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
393 if(G_WIN32_HAVE_WIDECHAR_API())
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
394 data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
395 else
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
396 data = (LPBYTE) g_malloc(nbytes + 1);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
397
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
398 if(_reg_read(reg_key, valname, &type, data, &nbytes)) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
399 if(G_WIN32_HAVE_WIDECHAR_API()) {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
400 wchar_t *wc_temp = (wchar_t*) data;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
401 wc_temp[nbytes / sizeof(wchar_t)] = '\0';
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
402 result = g_utf16_to_utf8(wc_temp, -1,
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
403 NULL, NULL, NULL);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
404 } else {
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
405 char *cp_temp = (char*) data;
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
406 cp_temp[nbytes] = '\0';
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
407 result = g_locale_to_utf8(cp_temp, -1,
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
408 NULL, NULL, NULL);
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
409 }
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
410 }
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
411 g_free(data);
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
412 }
15032
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
413 RegCloseKey(reg_key);
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
414 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
415
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
416 return result;
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
417 }
65a111aba7a8 [gaim-migrate @ 17749]
Daniel Atallah <datallah@pidgin.im>
parents: 15027
diff changeset
418
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
419 void wpurple_init(void) {
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
420 WORD wVersionRequested;
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
421 WSADATA wsaData;
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
422 const char *perlenv;
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
423 char *newenv;
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
424
24171
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 22869
diff changeset
425 if (!g_thread_supported())
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 22869
diff changeset
426 g_thread_init(NULL);
d976cc3db118 Add support for reading SOCKS proxy information from the Windows proxy settings.
Daniel Atallah <datallah@pidgin.im>
parents: 22869
diff changeset
427
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
428 purple_debug_info("wpurple", "wpurple_init start\n");
21106
b85fbef13eed Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 20747
diff changeset
429 purple_debug_info("wpurple", "libpurple version: " DISPLAY_VERSION "\n");
14810
7ee46e25e9d8 [gaim-migrate @ 17505]
Daniel Atallah <datallah@pidgin.im>
parents: 14784
diff changeset
430
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
431 purple_debug_info("wpurple", "Glib:%u.%u.%u\n",
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
432 glib_major_version, glib_minor_version, glib_micro_version);
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
433
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
434 /* Winsock init */
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
435 wVersionRequested = MAKEWORD(2, 2);
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
436 WSAStartup(wVersionRequested, &wsaData);
6848
ca91f08b60df [gaim-migrate @ 7393]
Herman Bloggs <herman@bluedigits.com>
parents: 6816
diff changeset
437
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
438 /* Confirm that the winsock DLL supports 2.2 */
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
439 /* Note that if the DLL supports versions greater than
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
440 2.2 in addition to 2.2, it will still return 2.2 in
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
441 wVersion since that is the version we requested. */
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
442 if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
443 purple_debug_error("wpurple", "Could not find a usable WinSock DLL. Oh well.\n");
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
444 WSACleanup();
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
445 }
3856
db98b5201da8 [gaim-migrate @ 4008]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
446
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
447 /* Set Environmental Variables */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
448 /* Tell perl where to find Purple's perl modules */
13322
c973bc4b0a53 [gaim-migrate @ 15690]
Daniel Atallah <datallah@pidgin.im>
parents: 12572
diff changeset
449 perlenv = g_getenv("PERL5LIB");
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
450 newenv = g_strdup_printf("%s%s%s" G_DIR_SEPARATOR_S "perlmod;",
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
451 perlenv ? perlenv : "",
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
452 perlenv ? ";" : "",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
453 wpurple_install_dir());
14334
aec64dbd9564 [gaim-migrate @ 16957]
Daniel Atallah <datallah@pidgin.im>
parents: 14331
diff changeset
454 if (!g_setenv("PERL5LIB", newenv, TRUE))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
455 purple_debug_warning("wpurple", "putenv failed for PERL5LIB\n");
11323
d9a148f36cbc [gaim-migrate @ 13528]
Daniel Atallah <datallah@pidgin.im>
parents: 11256
diff changeset
456 g_free(newenv);
6848
ca91f08b60df [gaim-migrate @ 7393]
Herman Bloggs <herman@bluedigits.com>
parents: 6816
diff changeset
457
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
458 purple_debug_info("wpurple", "wpurple_init end\n");
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
459 }
3856
db98b5201da8 [gaim-migrate @ 4008]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
460
3907
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
461 /* Windows Cleanup */
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
462
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
463 void wpurple_cleanup(void) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
464 purple_debug_info("wpurple", "wpurple_cleanup\n");
3907
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
465
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
466 /* winsock cleanup */
7523
8563b0512405 [gaim-migrate @ 8136]
Herman Bloggs <herman@bluedigits.com>
parents: 7350
diff changeset
467 WSACleanup();
3907
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
468
10673
3177232170c7 [gaim-migrate @ 12213]
Richard Laager <rlaager@pidgin.im>
parents: 10589
diff changeset
469 g_free(app_data_dir);
26745
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
470 g_free(install_dir);
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
471 g_free(lib_dir);
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
472 g_free(locale_dir);
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
473
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
474 app_data_dir = NULL;
26745
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
475 install_dir = NULL;
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
476 lib_dir = NULL;
c51eb424a60c Clean up libpurple memory allocations on win32 libpurple uninit.
Nick Hebner <hebnern@gmail.com>
parents: 24171
diff changeset
477 locale_dir = NULL;
14331
6f7f9bd34916 [gaim-migrate @ 16951]
Daniel Atallah <datallah@pidgin.im>
parents: 14286
diff changeset
478
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
479 libpurpledll_hInstance = NULL;
3907
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
480 }
7de53cfd3660 [gaim-migrate @ 4060]
Herman Bloggs <herman@bluedigits.com>
parents: 3905
diff changeset
481
20587
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
482 long
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
483 wpurple_get_tz_offset() {
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
484 TIME_ZONE_INFORMATION tzi;
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
485 DWORD ret;
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
486 long off = -1;
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
487
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
488 if ((ret = GetTimeZoneInformation(&tzi)) != TIME_ZONE_ID_INVALID)
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
489 {
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
490 off = -(tzi.Bias * 60);
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
491 if (ret == TIME_ZONE_ID_DAYLIGHT)
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
492 off -= tzi.DaylightBias * 60;
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
493 }
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
494
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
495 return off;
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
496 }
55af483c9e86 3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents: 18633
diff changeset
497
3950
0cab330f1cd6 [gaim-migrate @ 4129]
Herman Bloggs <herman@bluedigits.com>
parents: 3907
diff changeset
498 /* DLL initializer */
15782
f2da034243cd I forgot to add the new mingw makefiles.
Daniel Atallah <datallah@pidgin.im>
parents: 15435
diff changeset
499 /* suppress gcc "no previous prototype" warning */
f2da034243cd I forgot to add the new mingw makefiles.
Daniel Atallah <datallah@pidgin.im>
parents: 15435
diff changeset
500 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
14810
7ee46e25e9d8 [gaim-migrate @ 17505]
Daniel Atallah <datallah@pidgin.im>
parents: 14784
diff changeset
501 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15782
diff changeset
502 libpurpledll_hInstance = hinstDLL;
3856
db98b5201da8 [gaim-migrate @ 4008]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
503 return TRUE;
db98b5201da8 [gaim-migrate @ 4008]
Herman Bloggs <herman@bluedigits.com>
parents: 3630
diff changeset
504 }

mercurial