annotate src/win_gaim.c @ 10688:7818a5e9e3a2

[gaim-migrate @ 12237] Fixed a problem which would make gaim unable to use GTK installations that it should be able to use. The DllPath registry entry was never being read because the target buffer size was being incorrectly specified. Unless you had the Installer registry key specified and set to NSIS, it would point to the wrong directory for GTK dlls. The error messages from failed registry lookups are now better. I also removed some code that was intended to support alternate GTK installations (dropline?) that use the \lib directory instead of the \bin for the gtk+ dlls, it really isn't an issue anymore. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Sat, 12 Mar 2005 19:35:37 +0000
parents db44efdf6565
children cfacc0de0d94
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
2 * win_gaim.c
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 *
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 * Date: June, 2002
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 * Description: Entry point for win32 gaim, and various win32 dependant
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6 * routines.
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
7 *
8046
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7802
diff changeset
8 * Gaim is the legal property of its developers, whose names are too numerous
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7802
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7802
diff changeset
10 * source distribution.
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
11 *
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
12 * This program is free software; you can redistribute it and/or modify
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
13 * it under the terms of the GNU General Public License as published by
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
15 * (at your option) any later version.
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
16 *
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
17 * This program is distributed in the hope that it will be useful,
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
20 * GNU General Public License for more details.
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
21 *
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
22 * You should have received a copy of the GNU General Public License
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
23 * along with this program; if not, write to the Free Software
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
25 *
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26 */
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 #include <windows.h>
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
28 #include <fcntl.h>
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 #include <stdlib.h>
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
30 #include <string.h>
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
31 #include <stdio.h>
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
33 typedef int (CALLBACK* LPFNGAIMMAIN)(HINSTANCE, int, char**);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
34 typedef void (CALLBACK* LPFNSETDLLDIRECTORY)(LPCTSTR);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
35
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36 /*
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 * PROTOTYPES
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
38 */
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
39 static LPFNGAIMMAIN gaim_main = NULL;
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
40 static LPFNSETDLLDIRECTORY MySetDllDirectory = NULL;
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
41
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
42
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
43 static BOOL read_reg_string(HKEY key, char* sub_key, char* val_name, LPBYTE data, LPDWORD data_len) {
10688
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
44 HKEY hkey;
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
45 BOOL ret = FALSE;
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
46 LONG retv;
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
47
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
48 if (ERROR_SUCCESS == (retv = RegOpenKeyEx(key, sub_key, 0,
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
49 KEY_QUERY_VALUE, &hkey))) {
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
50 if (ERROR_SUCCESS == (retv = RegQueryValueEx(hkey, val_name,
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
51 NULL, NULL, data, data_len)))
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
52 ret = TRUE;
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
53 else {
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
54 TCHAR szBuf[80];
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
55
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
56 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
57 NULL, retv, 0,
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
58 (LPTSTR) &szBuf, sizeof(szBuf), NULL);
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
59
10688
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
60 printf("Could not read reg key '%s' subkey '%s' value: '%s'\nError: (%ld) %s\n",
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
61 ((key == HKEY_LOCAL_MACHINE) ? "HKLM" :
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
62 (key == HKEY_CURRENT_USER) ? "HKCU" :
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
63 "???"),
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
64 sub_key, val_name, retv, szBuf);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
65 }
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
66 RegCloseKey(key);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
67 }
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
68 else {
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
69 TCHAR szBuf[80];
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
70
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
71 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0,
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
72 (LPTSTR) &szBuf, sizeof(szBuf), NULL);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
73 printf("Could not open reg subkey: %s\nError: (%ld) %s\n",
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
74 sub_key, retv, szBuf);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
75 }
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
76
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
77 return ret;
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
78 }
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
79
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
80 static void dll_prep() {
10688
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
81 char gtkpath[MAX_PATH + 1];
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
82 char path[MAX_PATH + 1];
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
83 DWORD plen;
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
84 BOOL gotreg = FALSE;
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
85 HKEY hkey;
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
86 HMODULE hmod;
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
87
10688
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
88 plen = sizeof(gtkpath);
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
89 if(!(gotreg = read_reg_string((hkey=HKEY_LOCAL_MACHINE), "SOFTWARE\\GTK\\2.0", "Path", (LPBYTE)&gtkpath, &plen)))
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
90 gotreg = read_reg_string((hkey=HKEY_CURRENT_USER), "SOFTWARE\\GTK\\2.0", "Path", (LPBYTE)&gtkpath, &plen);
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
91
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
92 if(!gotreg)
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
93 return;
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
94
10688
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
95 /* this value is replaced during a successful RegQueryValueEx() */
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
96 plen = sizeof(path);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
97 /* Determine GTK+ dll path .. */
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
98 if (!read_reg_string(hkey, "SOFTWARE\\GTK\\2.0", "DllPath",
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
99 (LPBYTE) &path, &plen)) {
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
100 strcpy(path, gtkpath);
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
101 strcat(path, "\\bin");
7818a5e9e3a2 [gaim-migrate @ 12237]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10521
diff changeset
102 }
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
103
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
104 printf("GTK+ path found: %s\n", path);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
105
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
106 if((hmod=GetModuleHandle("kernel32.dll"))) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
107 MySetDllDirectory = (LPFNSETDLLDIRECTORY)GetProcAddress(hmod, "SetDllDirectory");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
108 if(!MySetDllDirectory)
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
109 printf("SetDllDirectory not supported\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
110 }
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
111 else
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
112 printf("Error getting kernel32.dll module handle\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
113
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
114 /* For Windows XP SP1+ / Server 2003 we use SetDllDirectory to avoid dll hell */
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
115 if(MySetDllDirectory) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
116 printf("Using SetDllDirectory\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
117 MySetDllDirectory(path);
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
118 }
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
119
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
120 /* For the rest, we set the current directory and make sure SafeDllSearch is set
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
121 to 0 where needed. */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
122 else {
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
123 OSVERSIONINFO osinfo;
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
124
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
125 printf("Setting current directory to GTK+ dll directory\n");
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
126 SetCurrentDirectory(path);
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
127 /* For Windows 2000 (SP3+) / WinXP (No SP):
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
128 * If SafeDllSearchMode is set to 1, Windows system directories are
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
129 * searched for dlls before the current directory. Therefore we set it
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
130 * to 0.
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
131 */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
132 osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
133 GetVersionEx(&osinfo);
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
134 if((osinfo.dwMajorVersion == 5 &&
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
135 osinfo.dwMinorVersion == 0 &&
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
136 strcmp(osinfo.szCSDVersion, "Service Pack 3") >= 0) ||
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
137 (osinfo.dwMajorVersion == 5 &&
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
138 osinfo.dwMinorVersion == 1 &&
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
139 strcmp(osinfo.szCSDVersion, "") >= 0)
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
140 ) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
141 DWORD regval = 1;
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
142 DWORD reglen = sizeof(DWORD);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
143
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
144 printf("Using Win2k (SP3+) / WinXP (No SP).. Checking SafeDllSearch\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
145 read_reg_string(HKEY_LOCAL_MACHINE,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
146 "System\\CurrentControlSet\\Control\\Session Manager",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
147 "SafeDllSearchMode",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
148 (LPBYTE)&regval,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
149 &reglen);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
150
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
151 if(regval != 0) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
152 printf("Trying to set SafeDllSearchMode to 0\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
153 regval = 0;
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
154 if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
155 "System\\CurrentControlSet\\Control\\Session Manager",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
156 0, KEY_SET_VALUE, &hkey) == ERROR_SUCCESS) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
157 if(RegSetValueEx(hkey,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
158 "SafeDllSearchMode",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
159 0,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
160 REG_DWORD,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
161 (LPBYTE) &regval,
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
162 sizeof(DWORD)) != ERROR_SUCCESS)
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
163 printf("Error writing SafeDllSearchMode. Error: %u\n",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
164 (UINT)GetLastError());
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
165 RegCloseKey(hkey);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
166 }
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
167 else
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
168 printf("Error opening Session Manager key for writing. Error: %u\n",
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
169 (UINT)GetLastError());
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
170 }
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
171 else
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
172 printf("SafeDllSearchMode is set to 0\n");
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
173 }/*end else*/
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
174 }
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
175 }
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
176
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
177 static char* wgaim_lcid_to_posix(LCID lcid) {
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
178 switch(lcid) {
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
179 case 1026: return "bg"; /* bulgarian */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
180 case 2125: return "my_MM"; /* burmese (Myanmar) */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
181 case 1027: return "ca"; /* catalan */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
182 case 1050: return "hr"; /* croatian */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
183 case 1029: return "cs"; /* czech */
8735
92cbf9713795 [gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
184 case 1030: return "da"; /* danish */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
185 case 1043: return "nl"; /* dutch - netherlands */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
186 case 1033: return "en"; /* english - us */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
187 case 3081: return "en_AU"; /* english - australia */
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
188 case 4105: return "en_CA"; /* english - canada */
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
189 case 2057: return "en_GB"; /* english - great britain */
8735
92cbf9713795 [gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
190 case 1035: return "fi"; /* finnish */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
191 case 1036: return "fr"; /* french - france */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
192 case 1031: return "de"; /* german - germany */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
193 case 1032: return "el"; /* greek */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
194 case 1037: return "he"; /* hebrew */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
195 case 1081: return "hi"; /* hindi */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
196 case 1038: return "hu"; /* hungarian */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
197 case 1040: return "it"; /* italian - italy */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
198 case 1041: return "ja"; /* japanese */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
199 case 1042: return "ko"; /* korean */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
200 case 1063: return "lt"; /* lithuanian */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
201 case 1071: return "mk"; /* macedonian */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
202 case 1044: return "no"; /* norwegian */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
203 case 1045: return "pl"; /* polish */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
204 case 2070: return "pt"; /* portuguese - portugal */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
205 case 1046: return "pt_BR"; /* portuguese - brazil */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
206 case 1048: return "ro"; /* romanian - romania */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
207 case 1049: return "ru"; /* russian - russia */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
208 case 2074: return "sr@Latn"; /* serbian - latin */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
209 case 3098: return "sr"; /* serbian - cyrillic */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
210 case 2052: return "zh_CN"; /* chinese - china (simple) */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
211 case 1051: return "sk"; /* slovak */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
212 case 1060: return "sl"; /* slovenian */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
213 case 1034: return "es"; /* spanish */
10095
b28f9be379b3 [gaim-migrate @ 11114]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 8735
diff changeset
214 case 1052: return "sq"; /* albanian */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
215 case 1053: return "sv"; /* swedish */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
216 case 1054: return "th"; /* thai */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
217 case 1028: return "zh_TW"; /* chinese - taiwan (traditional) */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
218 case 1055: return "tr"; /* turkish */
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
219 case 1058: return "uk"; /* ukrainian */
10521
db44efdf6565 [gaim-migrate @ 11836]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10330
diff changeset
220 case 1066: return "vi"; /* vietnamese */
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
221 default:
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
222 return NULL;
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
223 }
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
224 }
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
225
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
226 /* Determine and set Gaim locale as follows (in order of priority):
10210
4d3c2749deec [gaim-migrate @ 11332]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10095
diff changeset
227 - Check GAIMLANG env var
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
228 - Check NSIS Installer Language reg value
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
229 - Use default user locale
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
230 */
10330
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
231 static const char* wgaim_get_locale() {
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
232 const char* locale=NULL;
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
233 char data[10];
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
234 DWORD datalen = 10;
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
235 LCID lcid;
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
236
10210
4d3c2749deec [gaim-migrate @ 11332]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10095
diff changeset
237 /* Check if user set GAIMLANG env var */
10330
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
238 if((locale = getenv("GAIMLANG")))
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
239 return locale;
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
240
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
241 if(read_reg_string(HKEY_CURRENT_USER, "SOFTWARE\\gaim", "Installer Language", (LPBYTE)&data, &datalen)) {
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
242 if((locale = wgaim_lcid_to_posix(atoi(data))))
10330
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
243 return locale;
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
244 }
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
245
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
246 lcid = GetUserDefaultLCID();
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
247 if((locale = wgaim_lcid_to_posix(lcid)))
10330
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
248 return locale;
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
249
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
250 return "en";
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
251 }
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
252
10330
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
253 static void wgaim_set_locale() {
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
254 const char* locale=NULL;
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
255 char envstr[25];
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
256
4f5a7ddd3161 [gaim-migrate @ 11537]
Mark Doliner <mark@kingant.net>
parents: 10227
diff changeset
257 locale = wgaim_get_locale();
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
258
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
259 snprintf(envstr, 25, "LANG=%s", locale);
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
260 printf("Setting locale: %s\n", envstr);
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
261 putenv(envstr);
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
262 }
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
263
10212
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
264 static BOOL wgaim_set_running() {
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
265 HANDLE h;
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
266
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
267 if((h=CreateMutex(NULL, FALSE, "gaim_is_running"))) {
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
268 if(GetLastError() == ERROR_ALREADY_EXISTS) {
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
269 MessageBox(NULL, "An instance of Gaim is already running", NULL, MB_OK | MB_TOPMOST);
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
270 return FALSE;
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
271 }
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
272 }
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
273 return TRUE;
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
274 }
7350
e28728795a45 [gaim-migrate @ 7941]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6890
diff changeset
275
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
276 #ifdef __GNUC__
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
277 # ifndef _stdcall
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
278 # define _stdcall __attribute__((stdcall))
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
279 # endif
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
280 #endif
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
281
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
282 int _stdcall
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
283 WinMain (struct HINSTANCE__ *hInstance,
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
284 struct HINSTANCE__ *hPrevInstance,
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
285 char *lpszCmdLine,
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
286 int nCmdShow)
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
287 {
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
288 char errbuf[512];
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
289 char gaimdir[MAX_PATH];
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
290 HMODULE hmod;
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
291
7802
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
292 /* If debug flag used, create console for output */
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
293 if(strstr(lpszCmdLine, "-d")) {
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
294 if(AllocConsole())
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
295 freopen ("CONOUT$", "w", stdout);
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
296 }
f1d2907db5be [gaim-migrate @ 8448]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7522
diff changeset
297
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
298 /* Load exception handler if we have it */
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
299 if(GetModuleFileName(NULL, gaimdir, MAX_PATH) != 0) {
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
300 char *tmp = gaimdir;
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
301 char *prev = NULL;
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
302
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
303 while((tmp=strchr(tmp, '\\'))) {
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
304 prev = tmp;
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
305 tmp+=1;
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
306 }
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
307 if(prev) {
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
308 prev[0] = '\0';
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
309 strcat(gaimdir, "\\exchndl.dll");
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
310 if(LoadLibrary(gaimdir))
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
311 printf("Loaded exchndl.dll\n");
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
312 }
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
313 }
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
314 else {
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
315 snprintf(errbuf, 512, "Error getting module filename. Error: %u", (UINT)GetLastError());
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
316 MessageBox(NULL, errbuf, NULL, MB_OK | MB_TOPMOST);
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
317 }
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
318
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
319 if(!getenv("GAIM_NO_DLL_CHECK"))
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
320 dll_prep();
6816
5aeba37b303c [gaim-migrate @ 7356]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 4490
diff changeset
321
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
322 wgaim_set_locale();
10227
53c9ba039354 [gaim-migrate @ 11361]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10212
diff changeset
323 if(!getenv("GAIM_MULTI_INST") && !wgaim_set_running())
10212
08251403c871 [gaim-migrate @ 11336]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 10210
diff changeset
324 return 0;
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
325
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
326 /* Now we are ready for Gaim .. */
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
327 if((hmod=LoadLibrary("gaim.dll"))) {
7522
07156f873116 [gaim-migrate @ 8135]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7477
diff changeset
328 gaim_main = (LPFNGAIMMAIN)GetProcAddress(hmod, "gaim_main");
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
329 }
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
330
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
331 if(!gaim_main) {
7477
29d69daa1ede [gaim-migrate @ 8090]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7363
diff changeset
332 snprintf(errbuf, 512, "Error loading gaim.dll. Error: %u", (UINT)GetLastError());
7356
be11a6f2fe00 [gaim-migrate @ 7949]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 7350
diff changeset
333 MessageBox(NULL, errbuf, NULL, MB_OK | MB_TOPMOST);
6890
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
334 return 0;
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
335 }
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
336 else
4eee806af511 [gaim-migrate @ 7436]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 6816
diff changeset
337 return gaim_main (hInstance, __argc, __argv);
4490
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
338 }
70b892694e0b [gaim-migrate @ 4765]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
339