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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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, &reg_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, &reg_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, &reg_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, &reg_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 }