Mercurial > pidgin.yaz
annotate libgaim/win32/win32dep.c @ 15204:f814b2df9cce
[gaim-migrate @ 17993]
Blocking on Google Talk. Our Privacy API sucks so bad that even with no prior support for blocking in Jabber, this has no interface changes. If someone wanted to implement the deprecated Jabber privacy lists API, though, that would be ok by me.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Thu, 14 Dec 2006 04:56:54 +0000 |
parents | 721465a37d4e |
children |
rev | line source |
---|---|
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
1 /* |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
2 * gaim |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
3 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
4 * File: win32dep.c |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
5 * Date: June, 2002 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
6 * Description: Windows dependant code for Gaim |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
7 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
8 * Copyright (C) 2002-2003, Herman Bloggs <hermanator12002@yahoo.com> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
9 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
10 * This program is free software; you can redistribute it and/or modify |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
11 * it under the terms of the GNU General Public License as published by |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
12 * the Free Software Foundation; either version 2 of the License, or |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
13 * (at your option) any later version. |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
14 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
15 * This program is distributed in the hope that it will be useful, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
18 * GNU General Public License for more details. |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
19 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
20 * You should have received a copy of the GNU General Public License |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
21 * along with this program; if not, write to the Free Software |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
23 * |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
24 */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
25 #define _WIN32_IE 0x500 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
26 #include <windows.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
27 #include <io.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
28 #include <stdlib.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
29 #include <stdio.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
30 #include <winuser.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
31 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
32 #include <glib.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
33 #include <glib/gstdio.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
34 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
35 #include "debug.h" |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
36 #include "notify.h" |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
37 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
38 #include <libintl.h> |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
39 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
40 #include "win32dep.h" |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
41 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
42 /* |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
43 * DEFINES & MACROS |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
44 */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
45 #define _(x) gettext(x) |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
46 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
47 #define WIN32_PROXY_REGKEY "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
48 |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
49 /* For shfolder.dll */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
50 typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
51 typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHW)(HWND, int, HANDLE, DWORD, LPWSTR); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
52 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
53 /* |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
54 * LOCALS |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
55 */ |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
56 static char *app_data_dir = NULL, *install_dir = NULL, |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
57 *lib_dir = NULL, *locale_dir = NULL; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
58 |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
59 static HINSTANCE libgaimdll_hInstance = 0; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
60 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
61 static HANDLE proxy_change_event = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
62 static HKEY proxy_regkey = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
63 |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
64 /* |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
65 * PUBLIC CODE |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
66 */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
67 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
68 /* Escape windows dir separators. This is needed when paths are saved, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
69 and on being read back have their '\' chars used as an escape char. |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
70 Returns an allocated string which needs to be freed. |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
71 */ |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
72 char *wgaim_escape_dirsep(const char *filename) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
73 int sepcount = 0; |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
74 const char *tmp = filename; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
75 char *ret; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
76 int cnt = 0; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
77 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
78 g_return_val_if_fail(filename != NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
79 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
80 while(*tmp) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
81 if(*tmp == '\\') |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
82 sepcount++; |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
83 tmp++; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
84 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
85 ret = g_malloc0(strlen(filename) + sepcount + 1); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
86 while(*filename) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
87 ret[cnt] = *filename; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
88 if(*filename == '\\') |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
89 ret[++cnt] = '\\'; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
90 filename++; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
91 cnt++; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
92 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
93 ret[cnt] = '\0'; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
94 return ret; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
95 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
96 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
97 /* Determine whether the specified dll contains the specified procedure. |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
98 If so, load it (if not already loaded). */ |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
99 FARPROC wgaim_find_and_loadproc(const char *dllname, const char *procedure) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
100 HMODULE hmod; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
101 BOOL did_load = FALSE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
102 FARPROC proc = 0; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
103 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
104 if(!(hmod = GetModuleHandle(dllname))) { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
105 gaim_debug_warning("wgaim", "%s not already loaded; loading it...\n", dllname); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
106 if(!(hmod = LoadLibrary(dllname))) { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
107 gaim_debug_error("wgaim", "Could not load: %s\n", dllname); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
108 return NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
109 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
110 else |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
111 did_load = TRUE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
112 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
113 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
114 if((proc = GetProcAddress(hmod, procedure))) { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
115 gaim_debug_info("wgaim", "This version of %s contains %s\n", |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
116 dllname, procedure); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
117 return proc; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
118 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
119 else { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
120 gaim_debug_warning("wgaim", "Function %s not found in dll %s\n", |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
121 procedure, dllname); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
122 if(did_load) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
123 /* unload dll */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
124 FreeLibrary(hmod); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
125 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
126 return NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
127 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
128 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
129 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
130 /* Determine Gaim Paths during Runtime */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
131 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
132 /* Get paths to special Windows folders. */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
133 char *wgaim_get_special_folder(int folder_type) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
134 static LPFNSHGETFOLDERPATHA MySHGetFolderPathA = NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
135 static LPFNSHGETFOLDERPATHW MySHGetFolderPathW = NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
136 char *retval = NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
137 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
138 if (!MySHGetFolderPathW) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
139 MySHGetFolderPathW = (LPFNSHGETFOLDERPATHW) |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
140 wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathW"); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
141 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
142 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
143 if (MySHGetFolderPathW) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
144 wchar_t utf_16_dir[MAX_PATH + 1]; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
145 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
146 if (SUCCEEDED(MySHGetFolderPathW(NULL, folder_type, NULL, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
147 SHGFP_TYPE_CURRENT, utf_16_dir))) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
148 retval = g_utf16_to_utf8(utf_16_dir, -1, NULL, NULL, NULL); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
149 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
150 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
151 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
152 if (!retval) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
153 if (!MySHGetFolderPathA) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
154 MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA) |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
155 wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathA"); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
156 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
157 if (MySHGetFolderPathA) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
158 char locale_dir[MAX_PATH + 1]; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
159 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
160 if (SUCCEEDED(MySHGetFolderPathA(NULL, folder_type, NULL, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
161 SHGFP_TYPE_CURRENT, locale_dir))) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
162 retval = g_locale_to_utf8(locale_dir, -1, NULL, NULL, NULL); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
163 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
164 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
165 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
166 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
167 return retval; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
168 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
169 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
170 const char *wgaim_install_dir(void) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
171 static gboolean initialized = FALSE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
172 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
173 if (!initialized) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
174 char *tmp = NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
175 if (G_WIN32_HAVE_WIDECHAR_API()) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
176 wchar_t winstall_dir[MAXPATHLEN]; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
177 if (GetModuleFileNameW(NULL, winstall_dir, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
178 MAXPATHLEN) > 0) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
179 tmp = g_utf16_to_utf8(winstall_dir, -1, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
180 NULL, NULL, NULL); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
181 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
182 } else { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
183 gchar cpinstall_dir[MAXPATHLEN]; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
184 if (GetModuleFileNameA(NULL, cpinstall_dir, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
185 MAXPATHLEN) > 0) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
186 tmp = g_locale_to_utf8(cpinstall_dir, |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
187 -1, NULL, NULL, NULL); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
188 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
189 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
190 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
191 if (tmp == NULL) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
192 tmp = g_win32_error_message(GetLastError()); |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
193 gaim_debug_error("wgaim", |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
194 "GetModuleFileName error: %s\n", tmp); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
195 g_free(tmp); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
196 return NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
197 } else { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
198 install_dir = g_path_get_dirname(tmp); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
199 g_free(tmp); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
200 initialized = TRUE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
201 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
202 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
203 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
204 return install_dir; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
205 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
206 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
207 const char *wgaim_lib_dir(void) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
208 static gboolean initialized = FALSE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
209 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
210 if (!initialized) { |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
211 const char *inst_dir = wgaim_install_dir(); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
212 if (inst_dir != NULL) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
213 lib_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "plugins", inst_dir); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
214 initialized = TRUE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
215 } else { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
216 return NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
217 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
218 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
219 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
220 return lib_dir; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
221 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
222 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
223 const char *wgaim_locale_dir(void) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
224 static gboolean initialized = FALSE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
225 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
226 if (!initialized) { |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
227 const char *inst_dir = wgaim_install_dir(); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
228 if (inst_dir != NULL) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
229 locale_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "locale", inst_dir); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
230 initialized = TRUE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
231 } else { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
232 return NULL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
233 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
234 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
235 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
236 return locale_dir; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
237 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
238 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
239 const char *wgaim_data_dir(void) { |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
240 |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
241 if (!app_data_dir) { |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
242 /* Set app data dir, used by gaim_home_dir */ |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
243 const char *newenv = g_getenv("GAIMHOME"); |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
244 if (newenv) |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
245 app_data_dir = g_strdup(newenv); |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
246 else { |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
247 app_data_dir = wgaim_get_special_folder(CSIDL_APPDATA); |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
248 if (!app_data_dir) |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
249 app_data_dir = g_strdup("C:"); |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
250 } |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
251 gaim_debug_info("wgaim", "Gaim settings dir: %s\n", |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
252 app_data_dir); |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
253 } |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
254 |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
255 return app_data_dir; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
256 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
257 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
258 /* Miscellaneous */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
259 |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
260 gboolean wgaim_write_reg_string(HKEY rootkey, const char *subkey, const char *valname, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
261 const char *value) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
262 HKEY reg_key; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
263 gboolean success = FALSE; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
264 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
265 if(G_WIN32_HAVE_WIDECHAR_API()) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
266 wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
267 NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
268 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
269 if(RegOpenKeyExW(rootkey, wc_subkey, 0, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
270 KEY_SET_VALUE, ®_key) == ERROR_SUCCESS) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
271 wchar_t *wc_valname = NULL; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
272 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
273 if (valname) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
274 wc_valname = g_utf8_to_utf16(valname, -1, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
275 NULL, NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
276 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
277 if(value) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
278 wchar_t *wc_value = g_utf8_to_utf16(value, -1, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
279 NULL, NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
280 int len = (wcslen(wc_value) * sizeof(wchar_t)) + 1; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
281 if(RegSetValueExW(reg_key, wc_valname, 0, REG_SZ, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
282 (LPBYTE)wc_value, len |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
283 ) == ERROR_SUCCESS) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
284 success = TRUE; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
285 g_free(wc_value); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
286 } else |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
287 if(RegDeleteValueW(reg_key, wc_valname) == ERROR_SUCCESS) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
288 success = TRUE; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
289 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
290 g_free(wc_valname); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
291 } |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
292 g_free(wc_subkey); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
293 } else { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
294 char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
295 NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
296 if(RegOpenKeyExA(rootkey, cp_subkey, 0, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
297 KEY_SET_VALUE, ®_key) == ERROR_SUCCESS) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
298 char *cp_valname = NULL; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
299 if(valname) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
300 cp_valname = g_locale_from_utf8(valname, -1, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
301 NULL, NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
302 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
303 if (value) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
304 char *cp_value = g_locale_from_utf8(value, -1, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
305 NULL, NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
306 int len = strlen(cp_value) + 1; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
307 if(RegSetValueExA(reg_key, cp_valname, 0, REG_SZ, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
308 cp_value, len |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
309 ) == ERROR_SUCCESS) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
310 success = TRUE; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
311 g_free(cp_value); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
312 } else |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
313 if(RegDeleteValueA(reg_key, cp_valname) == ERROR_SUCCESS) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
314 success = TRUE; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
315 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
316 g_free(cp_valname); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
317 } |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
318 g_free(cp_subkey); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
319 } |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
320 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
321 if(reg_key != NULL) |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
322 RegCloseKey(reg_key); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
323 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
324 return success; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
325 } |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
326 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
327 static HKEY _reg_open_key(HKEY rootkey, const char *subkey, REGSAM access) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
328 HKEY reg_key = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
329 LONG rv; |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
330 |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
331 if(G_WIN32_HAVE_WIDECHAR_API()) { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
332 wchar_t *wc_subkey = g_utf8_to_utf16(subkey, -1, NULL, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
333 NULL, NULL); |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
334 rv = RegOpenKeyExW(rootkey, wc_subkey, 0, access, ®_key); |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
335 g_free(wc_subkey); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
336 } else { |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
337 char *cp_subkey = g_locale_from_utf8(subkey, -1, NULL, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
338 NULL, NULL); |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
339 rv = RegOpenKeyExA(rootkey, cp_subkey, 0, access, ®_key); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
340 g_free(cp_subkey); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
341 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
342 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
343 if (rv != ERROR_SUCCESS) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
344 char *errmsg = g_win32_error_message(rv); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
345 gaim_debug_info("wgaim", "Could not open reg key '%s' subkey '%s'.\nMessage: (%ld) %s\n", |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
346 ((rootkey == HKEY_LOCAL_MACHINE) ? "HKLM" : |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
347 (rootkey == HKEY_CURRENT_USER) ? "HKCU" : |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
348 (rootkey == HKEY_CLASSES_ROOT) ? "HKCR" : "???"), |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
349 subkey, rv, errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
350 g_free(errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
351 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
352 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
353 return reg_key; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
354 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
355 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
356 static gboolean _reg_read(HKEY reg_key, const char *valname, LPDWORD type, LPBYTE data, LPDWORD data_len) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
357 LONG rv; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
358 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
359 if(G_WIN32_HAVE_WIDECHAR_API()) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
360 wchar_t *wc_valname = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
361 if (valname) |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
362 wc_valname = g_utf8_to_utf16(valname, -1, NULL, NULL, NULL); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
363 rv = RegQueryValueExW(reg_key, wc_valname, 0, type, data, data_len); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
364 g_free(wc_valname); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
365 } else { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
366 char *cp_valname = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
367 if(valname) |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
368 cp_valname = g_locale_from_utf8(valname, -1, NULL, NULL, NULL); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
369 rv = RegQueryValueExA(reg_key, cp_valname, 0, type, data, data_len); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
370 g_free(cp_valname); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
371 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
372 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
373 if (rv != ERROR_SUCCESS) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
374 char *errmsg = g_win32_error_message(rv); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
375 gaim_debug_info("wgaim", "Could not read from reg key value '%s'.\nMessage: (%ld) %s\n", |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
376 valname, rv, errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
377 g_free(errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
378 } |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
379 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
380 return (rv == ERROR_SUCCESS); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
381 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
382 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
383 gboolean wgaim_read_reg_dword(HKEY rootkey, const char *subkey, const char *valname, LPDWORD result) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
384 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
385 DWORD type; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
386 DWORD nbytes; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
387 HKEY reg_key = _reg_open_key(rootkey, subkey, KEY_QUERY_VALUE); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
388 gboolean success = FALSE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
389 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
390 if(reg_key) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
391 if(_reg_read(reg_key, valname, &type, (LPBYTE)result, &nbytes)) |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
392 success = TRUE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
393 RegCloseKey(reg_key); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
394 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
395 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
396 return success; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
397 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
398 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
399 char *wgaim_read_reg_string(HKEY rootkey, const char *subkey, const char *valname) { |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
400 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
401 DWORD type; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
402 DWORD nbytes; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
403 HKEY reg_key = _reg_open_key(rootkey, subkey, KEY_QUERY_VALUE); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
404 char *result = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
405 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
406 if(reg_key) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
407 if(_reg_read(reg_key, valname, &type, NULL, &nbytes) && type == REG_SZ) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
408 LPBYTE data; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
409 if(G_WIN32_HAVE_WIDECHAR_API()) |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
410 data = (LPBYTE) g_new(wchar_t, ((nbytes + 1) / sizeof(wchar_t)) + 1); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
411 else |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
412 data = (LPBYTE) g_malloc(nbytes + 1); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
413 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
414 if(_reg_read(reg_key, valname, &type, data, &nbytes)) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
415 if(G_WIN32_HAVE_WIDECHAR_API()) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
416 wchar_t *wc_temp = (wchar_t*) data; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
417 wc_temp[nbytes / sizeof(wchar_t)] = '\0'; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
418 result = g_utf16_to_utf8(wc_temp, -1, |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
419 NULL, NULL, NULL); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
420 } else { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
421 char *cp_temp = (char*) data; |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
422 cp_temp[nbytes] = '\0'; |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
423 result = g_locale_to_utf8(cp_temp, -1, |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
424 NULL, NULL, NULL); |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
425 } |
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
426 } |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
427 g_free(data); |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
428 } |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
429 RegCloseKey(reg_key); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
430 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
431 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
432 return result; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
433 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
434 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
435 static void wgaim_refresh_proxy(void) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
436 gboolean set_proxy = FALSE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
437 DWORD enabled = 0; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
438 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
439 wgaim_read_reg_dword(HKEY_CURRENT_USER, WIN32_PROXY_REGKEY, |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
440 "ProxyEnable", &enabled); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
441 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
442 if (enabled & 1) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
443 char *c = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
444 char *tmp = wgaim_read_reg_string(HKEY_CURRENT_USER, WIN32_PROXY_REGKEY, |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
445 "ProxyServer"); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
446 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
447 /* There are proxy settings for several protocols */ |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
448 if (tmp && (c = g_strstr_len(tmp, strlen(tmp), "http="))) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
449 char *d; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
450 c += strlen("http="); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
451 d = strchr(c, ';'); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
452 if (d) |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
453 *d = '\0'; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
454 /* c now points the proxy server (and port) */ |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
455 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
456 /* There is only a global proxy */ |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
457 } else if (tmp && strlen(tmp) > 0 && !strchr(tmp, ';')) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
458 c = tmp; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
459 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
460 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
461 if (c) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
462 gaim_debug_info("wgaim", "Setting HTTP Proxy: 'http://%s'\n", c); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
463 g_setenv("HTTP_PROXY", c, TRUE); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
464 set_proxy = TRUE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
465 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
466 g_free(tmp); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
467 } |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
468 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
469 /* If there previously was a proxy set and there isn't one now, clear it */ |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
470 if (getenv("HTTP_PROXY") && !set_proxy) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
471 gaim_debug_info("wgaim", "Clearing HTTP Proxy\n"); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
472 g_unsetenv("HTTP_PROXY"); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
473 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
474 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
475 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
476 static void watch_for_proxy_changes(void) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
477 LONG rv; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
478 DWORD filter = REG_NOTIFY_CHANGE_NAME | |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
479 REG_NOTIFY_CHANGE_LAST_SET; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
480 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
481 if (!proxy_regkey && |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
482 !(proxy_regkey = _reg_open_key(HKEY_CURRENT_USER, |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
483 WIN32_PROXY_REGKEY, KEY_NOTIFY))) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
484 return; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
485 } |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
486 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
487 if (!(proxy_change_event = CreateEvent(NULL, TRUE, FALSE, NULL))) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
488 char *errmsg = g_win32_error_message(GetLastError()); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
489 gaim_debug_error("wgaim", "Unable to watch for proxy changes: %s\n", errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
490 g_free(errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
491 return; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
492 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
493 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
494 rv = RegNotifyChangeKeyValue(proxy_regkey, TRUE, filter, proxy_change_event, TRUE); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
495 if (rv != ERROR_SUCCESS) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
496 char *errmsg = g_win32_error_message(rv); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
497 gaim_debug_error("wgaim", "Unable to watch for proxy changes: %s\n", errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
498 g_free(errmsg); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
499 CloseHandle(proxy_change_event); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
500 proxy_change_event = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
501 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
502 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
503 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
504 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
505 gboolean wgaim_check_for_proxy_changes(void) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
506 gboolean changed = FALSE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
507 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
508 if (proxy_change_event && WaitForSingleObject(proxy_change_event, 0) == WAIT_OBJECT_0) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
509 CloseHandle(proxy_change_event); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
510 proxy_change_event = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
511 changed = TRUE; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
512 wgaim_refresh_proxy(); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
513 watch_for_proxy_changes(); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
514 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
515 |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
516 return changed; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
517 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
518 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
519 void wgaim_init(void) { |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
520 WORD wVersionRequested; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
521 WSADATA wsaData; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
522 const char *perlenv; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
523 char *newenv; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
524 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
525 gaim_debug_info("wgaim", "wgaim_init start\n"); |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
526 gaim_debug_info("wgaim", "libgaim version: " VERSION "\n"); |
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
527 |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
528 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
529 gaim_debug_info("wgaim", "Glib:%u.%u.%u\n", |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
530 glib_major_version, glib_minor_version, glib_micro_version); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
531 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
532 /* Winsock init */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
533 wVersionRequested = MAKEWORD(2, 2); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
534 WSAStartup(wVersionRequested, &wsaData); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
535 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
536 /* Confirm that the winsock DLL supports 2.2 */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
537 /* Note that if the DLL supports versions greater than |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
538 2.2 in addition to 2.2, it will still return 2.2 in |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
539 wVersion since that is the version we requested. */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
540 if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
541 gaim_debug_error("wgaim", "Could not find a usable WinSock DLL. Oh well.\n"); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
542 WSACleanup(); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
543 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
544 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
545 /* Set Environmental Variables */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
546 /* Tell perl where to find Gaim's perl modules */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
547 perlenv = g_getenv("PERL5LIB"); |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
548 newenv = g_strdup_printf("%s%s%s" G_DIR_SEPARATOR_S "perlmod;", |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
549 perlenv ? perlenv : "", |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
550 perlenv ? ";" : "", |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
551 wgaim_install_dir()); |
14272
7635195195c0
[gaim-migrate @ 16957]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14269
diff
changeset
|
552 if (!g_setenv("PERL5LIB", newenv, TRUE)) |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
553 gaim_debug_warning("wgaim", "putenv failed for PERL5LIB\n"); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
554 g_free(newenv); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
555 |
14722
51685370de57
[gaim-migrate @ 17476]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14272
diff
changeset
|
556 if (!g_thread_supported()) |
51685370de57
[gaim-migrate @ 17476]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14272
diff
changeset
|
557 g_thread_init(NULL); |
51685370de57
[gaim-migrate @ 17476]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14272
diff
changeset
|
558 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
559 /* If the proxy server environment variables are already set, |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
560 * we shouldn't override them */ |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
561 if (!getenv("HTTP_PROXY") && !getenv("http_proxy") && !getenv("HTTPPROXY")) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
562 wgaim_refresh_proxy(); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
563 watch_for_proxy_changes(); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
564 } else { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
565 gaim_debug_info("wgaim", "HTTP_PROXY env. var already set. Ignoring win32 Internet Settings.\n"); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
566 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
567 |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
568 gaim_debug_info("wgaim", "wgaim_init end\n"); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
569 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
570 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
571 /* Windows Cleanup */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
572 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
573 void wgaim_cleanup(void) { |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
574 gaim_debug_info("wgaim", "wgaim_cleanup\n"); |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
575 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
576 /* winsock cleanup */ |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
577 WSACleanup(); |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
578 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
579 g_free(app_data_dir); |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
580 app_data_dir = NULL; |
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
581 |
14971
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
582 if (proxy_regkey) { |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
583 RegCloseKey(proxy_regkey); |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
584 proxy_regkey = NULL; |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
585 } |
721465a37d4e
[gaim-migrate @ 17749]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14966
diff
changeset
|
586 |
14269
d1cb45dec12f
[gaim-migrate @ 16951]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14224
diff
changeset
|
587 libgaimdll_hInstance = NULL; |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
588 } |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
589 |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
590 /* DLL initializer */ |
14748
95246f6b6414
[gaim-migrate @ 17505]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
14722
diff
changeset
|
591 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { |
14224
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
592 libgaimdll_hInstance = hinstDLL; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
593 return TRUE; |
ab8a105eff62
[gaim-migrate @ 16905]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
diff
changeset
|
594 } |