# HG changeset patch # User Daniel Atallah # Date 1268690063 0 # Node ID d4ebabbfdeb6fd1725163009418bca002ec552c0 # Parent 39e8bbe897f2d02e59d633bd7495a4f1263a6052 We're not going to support a non-UNICODE pidgin.exe diff -r 39e8bbe897f2 -r d4ebabbfdeb6 pidgin/win32/winpidgin.c --- a/pidgin/win32/winpidgin.c Mon Mar 15 21:53:46 2010 +0000 +++ b/pidgin/win32/winpidgin.c Mon Mar 15 21:54:23 2010 +0000 @@ -26,13 +26,10 @@ */ /* This is for ATTACH_PARENT_PROCESS */ -#define UNICODE -#define _UNICODE #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x501 #endif #include -#include #include #include #include @@ -53,70 +50,70 @@ static LPFNPIDGINMAIN pidgin_main = NULL; static LPFNSETDLLDIRECTORY MySetDllDirectory = NULL; -static const TCHAR *get_win32_error_message(DWORD err) { - static TCHAR err_msg[512]; +static const wchar_t *get_win32_error_message(DWORD err) { + static wchar_t err_msg[512]; - FormatMessage( + FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &err_msg, sizeof(err_msg) / sizeof(TCHAR), NULL); + (LPWSTR) &err_msg, sizeof(err_msg) / sizeof(wchar_t), NULL); return err_msg; } -static BOOL read_reg_string(HKEY key, TCHAR *sub_key, TCHAR *val_name, LPBYTE data, LPDWORD data_len) { +static BOOL read_reg_string(HKEY key, wchar_t *sub_key, wchar_t *val_name, LPBYTE data, LPDWORD data_len) { HKEY hkey; BOOL ret = FALSE; LONG retv; - if (ERROR_SUCCESS == (retv = RegOpenKeyEx(key, sub_key, 0, + if (ERROR_SUCCESS == (retv = RegOpenKeyExW(key, sub_key, 0, KEY_QUERY_VALUE, &hkey))) { - if (ERROR_SUCCESS == (retv = RegQueryValueEx(hkey, val_name, + if (ERROR_SUCCESS == (retv = RegQueryValueExW(hkey, val_name, NULL, NULL, data, data_len))) ret = TRUE; else { - const TCHAR *err_msg = get_win32_error_message(retv); + const wchar_t *err_msg = get_win32_error_message(retv); - _tprintf(_T("Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n"), - (key == HKEY_LOCAL_MACHINE) ? _T("HKLM") - : ((key == HKEY_CURRENT_USER) ? _T("HKCU") : _T("???")), + wprintf(L"Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n", + (key == HKEY_LOCAL_MACHINE) ? L"HKLM" + : ((key == HKEY_CURRENT_USER) ? L"HKCU" : L"???"), sub_key, val_name, retv, err_msg); } RegCloseKey(hkey); } else { - TCHAR szBuf[80]; + wchar_t szBuf[80]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0, - (LPTSTR) &szBuf, sizeof(szBuf) / sizeof(TCHAR), NULL); - _tprintf(_T("Could not open reg subkey: %s\nError: (%ld) %s\n"), + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0, + (LPWSTR) &szBuf, sizeof(szBuf) / sizeof(wchar_t), NULL); + wprintf(L"Could not open reg subkey: %s\nError: (%ld) %s\n", sub_key, retv, szBuf); } return ret; } -static BOOL common_dll_prep(const TCHAR *path) { +static BOOL common_dll_prep(const wchar_t *path) { HMODULE hmod; HKEY hkey; struct _stat stat_buf; - TCHAR test_path[MAX_PATH + 1]; + wchar_t test_path[MAX_PATH + 1]; - _sntprintf(test_path, sizeof(test_path) / sizeof(TCHAR), - _T("%s\\libgtk-win32-2.0-0.dll"), path); - test_path[sizeof(test_path) / sizeof(TCHAR) - 1] = _T('\0'); + _snwprintf(test_path, sizeof(test_path) / sizeof(wchar_t), + L"%s\\libgtk-win32-2.0-0.dll", path); + test_path[sizeof(test_path) / sizeof(wchar_t) - 1] = L'\0'; - if (_tstat(test_path, &stat_buf) != 0) { + if (_wstat(test_path, &stat_buf) != 0) { printf("Unable to determine GTK+ path. \n" "Assuming GTK+ is in the PATH.\n"); return FALSE; } - _tprintf(_T("GTK+ path found: %s\n"), path); + wprintf(L"GTK+ path found: %s\n", path); - if ((hmod = GetModuleHandle(_T("kernel32.dll")))) { + if ((hmod = GetModuleHandleW(L"kernel32.dll"))) { MySetDllDirectory = (LPFNSETDLLDIRECTORY) GetProcAddress( hmod, "SetDllDirectoryW"); if (!MySetDllDirectory) @@ -133,44 +130,44 @@ /* For the rest, we set the current directory and make sure * SafeDllSearch is set to 0 where needed. */ else { - OSVERSIONINFO osinfo; + OSVERSIONINFOW osinfo; printf("Setting current directory to GTK+ dll directory\n"); - SetCurrentDirectory(path); + SetCurrentDirectoryW(path); /* For Windows 2000 (SP3+) / WinXP (No SP): * If SafeDllSearchMode is set to 1, Windows system directories are * searched for dlls before the current directory. Therefore we set it * to 0. */ - osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osinfo); + osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); + GetVersionExW(&osinfo); if ((osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion == 0 - && _tcscmp(osinfo.szCSDVersion, _T("Service Pack 3")) >= 0) + && wcscmp(osinfo.szCSDVersion, L"Service Pack 3") >= 0) || (osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion == 1 - && _tcscmp(osinfo.szCSDVersion, _T("")) >= 0) + && wcscmp(osinfo.szCSDVersion, L"") >= 0) ) { DWORD regval = 1; DWORD reglen = sizeof(DWORD); printf("Using Win2k (SP3+) / WinXP (No SP)... Checking SafeDllSearch\n"); read_reg_string(HKEY_LOCAL_MACHINE, - _T("System\\CurrentControlSet\\Control\\Session Manager"), - _T("SafeDllSearchMode"), + L"System\\CurrentControlSet\\Control\\Session Manager", + L"SafeDllSearchMode", (LPBYTE) ®val, ®len); if (regval != 0) { printf("Trying to set SafeDllSearchMode to 0\n"); regval = 0; - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - _T("System\\CurrentControlSet\\Control\\Session Manager"), + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"System\\CurrentControlSet\\Control\\Session Manager", 0, KEY_SET_VALUE, &hkey ) == ERROR_SUCCESS) { - if (RegSetValueEx(hkey, - _T("SafeDllSearchMode"), 0, + if (RegSetValueExW(hkey, + L"SafeDllSearchMode", 0, REG_DWORD, (LPBYTE) ®val, sizeof(DWORD) ) != ERROR_SUCCESS) @@ -188,35 +185,35 @@ return TRUE; } -static BOOL dll_prep(const TCHAR *pidgin_dir) { - TCHAR path[MAX_PATH + 1]; - path[0] = _T('\0'); +static BOOL dll_prep(const wchar_t *pidgin_dir) { + wchar_t path[MAX_PATH + 1]; + path[0] = L'\0'; if (*pidgin_dir) { - _sntprintf(path, sizeof(path) / sizeof(TCHAR), _T("%s\\Gtk\\bin"), pidgin_dir); - path[sizeof(path) / sizeof(TCHAR)] = _T('\0'); + _snwprintf(path, sizeof(path) / sizeof(wchar_t), L"%s\\Gtk\\bin", pidgin_dir); + path[sizeof(path) / sizeof(wchar_t) - 1] = L'\0'; } return common_dll_prep(path); } -static void portable_mode_dll_prep(const TCHAR *pidgin_dir) { +static void portable_mode_dll_prep(const wchar_t *pidgin_dir) { /* need to be able to fit MAX_PATH + "PIDGIN_ASPELL_DIR=\\Aspell\\bin" in path2 */ - TCHAR path[MAX_PATH + 1]; - TCHAR path2[MAX_PATH + 33]; - const TCHAR *prev = NULL; + wchar_t path[MAX_PATH + 1]; + wchar_t path2[MAX_PATH + 33]; + const wchar_t *prev = NULL; /* We assume that GTK+ is installed under \\path\to\Pidgin\..\GTK * First we find \\path\to */ if (*pidgin_dir) /* pidgin_dir points to \\path\to\Pidgin */ - prev = _tcsrchr(pidgin_dir, _T('\\')); + prev = wcsrchr(pidgin_dir, L'\\'); if (prev) { int cnt = (prev - pidgin_dir); - _tcsncpy(path, pidgin_dir, cnt); - path[cnt] = _T('\0'); + wcsncpy(path, pidgin_dir, cnt); + path[cnt] = L'\0'; } else { printf("Unable to determine current executable path. \n" "This will prevent the settings dir from being set.\n" @@ -225,130 +222,130 @@ } /* Set $HOME so that the GTK+ settings get stored in the right place */ - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("HOME=%s"), path); - _tputenv(path2); + _snwprintf(path2, sizeof(path2) / sizeof(wchar_t), L"HOME=%s", path); + _wputenv(path2); /* Set up the settings dir base to be \\path\to * The actual settings dir will be \\path\to\.purple */ - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PURPLEHOME=%s"), path); - _tprintf(_T("Setting settings dir: %s\n"), path2); - _tputenv(path2); + _snwprintf(path2, sizeof(path2) / sizeof(wchar_t), L"PURPLEHOME=%s", path); + wprintf(L"Setting settings dir: %s\n", path2); + _wputenv(path2); - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PIDGIN_ASPELL_DIR=%s\\Aspell\\bin"), path); - _tprintf(_T("%s\n"), path2); - _tputenv(path2); + _snwprintf(path2, sizeof(path2) / sizeof(wchar_t), L"PIDGIN_ASPELL_DIR=%s\\Aspell\\bin", path); + wprintf(L"%s\n", path2); + _wputenv(path2); if (!dll_prep(pidgin_dir)) { /* set the GTK+ path to be \\path\to\GTK\bin */ - _tcscat(path, _T("\\GTK\\bin")); + wcscat(path, L"\\GTK\\bin"); common_dll_prep(path); } } -static TCHAR* winpidgin_lcid_to_posix(LCID lcid) { - TCHAR *posix = NULL; +static wchar_t* winpidgin_lcid_to_posix(LCID lcid) { + wchar_t *posix = NULL; int lang_id = PRIMARYLANGID(lcid); int sub_id = SUBLANGID(lcid); switch (lang_id) { - case LANG_AFRIKAANS: posix = _T("af"); break; - case LANG_ARABIC: posix = _T("ar"); break; - case LANG_AZERI: posix = _T("az"); break; - case LANG_BENGALI: posix = _T("bn"); break; - case LANG_BULGARIAN: posix = _T("bg"); break; - case LANG_CATALAN: posix = _T("ca"); break; - case LANG_CZECH: posix = _T("cs"); break; - case LANG_DANISH: posix = _T("da"); break; - case LANG_ESTONIAN: posix = _T("et"); break; - case LANG_PERSIAN: posix = _T("fa"); break; - case LANG_GERMAN: posix = _T("de"); break; - case LANG_GREEK: posix = _T("el"); break; + case LANG_AFRIKAANS: posix = L"af"; break; + case LANG_ARABIC: posix = L"ar"; break; + case LANG_AZERI: posix = L"az"; break; + case LANG_BENGALI: posix = L"bn"; break; + case LANG_BULGARIAN: posix = L"bg"; break; + case LANG_CATALAN: posix = L"ca"; break; + case LANG_CZECH: posix = L"cs"; break; + case LANG_DANISH: posix = L"da"; break; + case LANG_ESTONIAN: posix = L"et"; break; + case LANG_PERSIAN: posix = L"fa"; break; + case LANG_GERMAN: posix = L"de"; break; + case LANG_GREEK: posix = L"el"; break; case LANG_ENGLISH: switch (sub_id) { case SUBLANG_ENGLISH_UK: - posix = _T("en_GB"); break; + posix = L"en_GB"; break; case SUBLANG_ENGLISH_AUS: - posix = _T("en_AU"); break; + posix = L"en_AU"; break; case SUBLANG_ENGLISH_CAN: - posix = _T("en_CA"); break; + posix = L"en_CA"; break; default: - posix = _T("en"); break; + posix = L"en"; break; } break; - case LANG_SPANISH: posix = _T("es"); break; - case LANG_BASQUE: posix = _T("eu"); break; - case LANG_FINNISH: posix = _T("fi"); break; - case LANG_FRENCH: posix = _T("fr"); break; - case LANG_GALICIAN: posix = _T("gl"); break; - case LANG_GUJARATI: posix = _T("gu"); break; - case LANG_HEBREW: posix = _T("he"); break; - case LANG_HINDI: posix = _T("hi"); break; - case LANG_HUNGARIAN: posix = _T("hu"); break; + case LANG_SPANISH: posix = L"es"; break; + case LANG_BASQUE: posix = L"eu"; break; + case LANG_FINNISH: posix = L"fi"; break; + case LANG_FRENCH: posix = L"fr"; break; + case LANG_GALICIAN: posix = L"gl"; break; + case LANG_GUJARATI: posix = L"gu"; break; + case LANG_HEBREW: posix = L"he"; break; + case LANG_HINDI: posix = L"hi"; break; + case LANG_HUNGARIAN: posix = L"hu"; break; case LANG_ICELANDIC: break; - case LANG_INDONESIAN: posix = _T("id"); break; - case LANG_ITALIAN: posix = _T("it"); break; - case LANG_JAPANESE: posix = _T("ja"); break; - case LANG_GEORGIAN: posix = _T("ka"); break; - case LANG_KANNADA: posix = _T("kn"); break; - case LANG_KOREAN: posix = _T("ko"); break; - case LANG_LITHUANIAN: posix = _T("lt"); break; - case LANG_MACEDONIAN: posix = _T("mk"); break; - case LANG_DUTCH: posix = _T("nl"); break; - case LANG_NEPALI: posix = _T("ne"); break; + case LANG_INDONESIAN: posix = L"id"; break; + case LANG_ITALIAN: posix = L"it"; break; + case LANG_JAPANESE: posix = L"ja"; break; + case LANG_GEORGIAN: posix = L"ka"; break; + case LANG_KANNADA: posix = L"kn"; break; + case LANG_KOREAN: posix = L"ko"; break; + case LANG_LITHUANIAN: posix = L"lt"; break; + case LANG_MACEDONIAN: posix = L"mk"; break; + case LANG_DUTCH: posix = L"nl"; break; + case LANG_NEPALI: posix = L"ne"; break; case LANG_NORWEGIAN: switch (sub_id) { case SUBLANG_NORWEGIAN_BOKMAL: - posix = _T("nb"); break; + posix = L"nb"; break; case SUBLANG_NORWEGIAN_NYNORSK: - posix = _T("nn"); break; + posix = L"nn"; break; } break; - case LANG_PUNJABI: posix = _T("pa"); break; - case LANG_POLISH: posix = _T("pl"); break; - case LANG_PASHTO: posix = _T("ps"); break; + case LANG_PUNJABI: posix = L"pa"; break; + case LANG_POLISH: posix = L"pl"; break; + case LANG_PASHTO: posix = L"ps"; break; case LANG_PORTUGUESE: switch (sub_id) { case SUBLANG_PORTUGUESE_BRAZILIAN: - posix = _T("pt_BR"); break; + posix = L"pt_BR"; break; default: - posix = _T("pt"); break; + posix = L"pt"; break; } break; - case LANG_ROMANIAN: posix = _T("ro"); break; - case LANG_RUSSIAN: posix = _T("ru"); break; - case LANG_SLOVAK: posix = _T("sk"); break; - case LANG_SLOVENIAN: posix = _T("sl"); break; - case LANG_ALBANIAN: posix = _T("sq"); break; + case LANG_ROMANIAN: posix = L"ro"; break; + case LANG_RUSSIAN: posix = L"ru"; break; + case LANG_SLOVAK: posix = L"sk"; break; + case LANG_SLOVENIAN: posix = L"sl"; break; + case LANG_ALBANIAN: posix = L"sq"; break; /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN */ case LANG_SERBIAN: switch (sub_id) { case SUBLANG_SERBIAN_LATIN: - posix = _T("sr@Latn"); break; + posix = L"sr@Latn"; break; case SUBLANG_SERBIAN_CYRILLIC: - posix = _T("sr"); break; + posix = L"sr"; break; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: - posix = _T("bs"); break; + posix = L"bs"; break; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: - posix = _T("hr"); break; + posix = L"hr"; break; } break; - case LANG_SWEDISH: posix = _T("sv"); break; - case LANG_TAMIL: posix = _T("ta"); break; - case LANG_TELUGU: posix = _T("te"); break; - case LANG_THAI: posix = _T("th"); break; - case LANG_TURKISH: posix = _T("tr"); break; - case LANG_UKRAINIAN: posix = _T("uk"); break; - case LANG_VIETNAMESE: posix = _T("vi"); break; - case LANG_XHOSA: posix = _T("xh"); break; + case LANG_SWEDISH: posix = L"sv"; break; + case LANG_TAMIL: posix = L"ta"; break; + case LANG_TELUGU: posix = L"te"; break; + case LANG_THAI: posix = L"th"; break; + case LANG_TURKISH: posix = L"tr"; break; + case LANG_UKRAINIAN: posix = L"uk"; break; + case LANG_VIETNAMESE: posix = L"vi"; break; + case LANG_XHOSA: posix = L"xh"; break; case LANG_CHINESE: switch (sub_id) { case SUBLANG_CHINESE_SIMPLIFIED: - posix = _T("zh_CN"); break; + posix = L"zh_CN"; break; case SUBLANG_CHINESE_TRADITIONAL: - posix = _T("zh_TW"); break; + posix = L"zh_TW"; break; default: - posix = _T("zh"); break; + posix = L"zh"; break; } break; case LANG_URDU: break; @@ -379,8 +376,8 @@ /* Deal with exceptions */ if (posix == NULL) { switch (lcid) { - case 0x0455: posix = _T("my_MM"); break; /* Myanmar (Burmese) */ - case 9999: posix = _T("ku"); break; /* Kurdish (from NSIS) */ + case 0x0455: posix = L"my_MM"; break; /* Myanmar (Burmese) */ + case 9999: posix = L"ku"; break; /* Kurdish (from NSIS) */ } } @@ -392,19 +389,19 @@ - Check NSIS Installer Language reg value - Use default user locale */ -static const TCHAR *winpidgin_get_locale() { - const TCHAR *locale = NULL; +static const wchar_t *winpidgin_get_locale() { + const wchar_t *locale = NULL; LCID lcid; - TCHAR data[10]; - DWORD datalen = sizeof(data) / sizeof(TCHAR); + wchar_t data[10]; + DWORD datalen = sizeof(data) / sizeof(wchar_t); /* Check if user set PIDGINLANG env var */ - if ((locale = _tgetenv(_T("PIDGINLANG")))) + if ((locale = _wgetenv(L"PIDGINLANG"))) return locale; - if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, _T("SOFTWARE\\pidgin"), - _T("Installer Language"), (LPBYTE) &data, &datalen)) { - if ((locale = winpidgin_lcid_to_posix(_ttoi(data)))) + if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, L"SOFTWARE\\pidgin", + L"Installer Language", (LPBYTE) &data, &datalen)) { + if ((locale = winpidgin_lcid_to_posix(_wtoi(data)))) return locale; } @@ -412,39 +409,39 @@ if ((locale = winpidgin_lcid_to_posix(lcid))) return locale; - return _T("en"); + return L"en"; } static void winpidgin_set_locale() { - const TCHAR *locale; - TCHAR envstr[25]; + const wchar_t *locale; + wchar_t envstr[25]; locale = winpidgin_get_locale(); - _sntprintf(envstr, sizeof(envstr) / sizeof(TCHAR), _T("LANG=%s"), locale); - _tprintf(_T("Setting locale: %s\n"), envstr); - _tputenv(envstr); + _snwprintf(envstr, sizeof(envstr) / sizeof(wchar_t), L"LANG=%s", locale); + wprintf(L"Setting locale: %s\n", envstr); + _wputenv(envstr); } static void winpidgin_add_stuff_to_path() { - TCHAR perl_path[MAX_PATH + 1]; - TCHAR *ppath = NULL; - TCHAR mit_kerberos_path[MAX_PATH + 1]; - TCHAR *mpath = NULL; + wchar_t perl_path[MAX_PATH + 1]; + wchar_t *ppath = NULL; + wchar_t mit_kerberos_path[MAX_PATH + 1]; + wchar_t *mpath = NULL; DWORD plen; printf("%s", "Looking for Perl... "); - plen = sizeof(perl_path) / sizeof(TCHAR); - if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Perl"), _T(""), + plen = sizeof(perl_path) / sizeof(wchar_t); + if (read_reg_string(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", L"", (LPBYTE) &perl_path, &plen)) { /* We *could* check for perl510.dll, but it seems unnecessary. */ - _tprintf(_T("found in '%s'.\n"), perl_path); + wprintf(L"found in '%s'.\n", perl_path); - if (perl_path[_tcslen(perl_path) - 1] != _T('\\')) - _tcscat(perl_path, _T("\\")); - _tcscat(perl_path, _T("bin")); + if (perl_path[wcslen(perl_path) - 1] != L'\\') + wcscat(perl_path, L"\\"); + wcscat(perl_path, L"bin"); ppath = perl_path; } else @@ -452,47 +449,47 @@ printf("%s", "Looking for MIT Kerberos... "); - plen = sizeof(mit_kerberos_path) / sizeof(TCHAR); - if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MIT\\Kerberos"), _T("InstallDir"), + plen = sizeof(mit_kerberos_path) / sizeof(wchar_t); + if (read_reg_string(HKEY_LOCAL_MACHINE, L"SOFTWARE\\MIT\\Kerberos", L"InstallDir", (LPBYTE) &mit_kerberos_path, &plen)) { /* We *could* check for gssapi32.dll */ - _tprintf(_T("found in '%s'.\n"), mit_kerberos_path); + wprintf(L"found in '%s'.\n", mit_kerberos_path); - if (mit_kerberos_path[_tcslen(mit_kerberos_path) - 1] != _T('\\')) - _tcscat(mit_kerberos_path, _T("\\")); - _tcscat(mit_kerberos_path, _T("bin")); + if (mit_kerberos_path[wcslen(mit_kerberos_path) - 1] != L'\\') + wcscat(mit_kerberos_path, L"\\"); + wcscat(mit_kerberos_path, L"bin"); mpath = mit_kerberos_path; } else printf("%s", "not found.\n"); if (ppath != NULL || mpath != NULL) { - const TCHAR *path = _tgetenv(_T("PATH")); - BOOL add_ppath = ppath != NULL && (path == NULL || !_tcsstr(path, ppath)); - BOOL add_mpath = mpath != NULL && (path == NULL || !_tcsstr(path, mpath)); - TCHAR *newpath; + const wchar_t *path = _wgetenv(L"PATH"); + BOOL add_ppath = ppath != NULL && (path == NULL || !wcsstr(path, ppath)); + BOOL add_mpath = mpath != NULL && (path == NULL || !wcsstr(path, mpath)); + wchar_t *newpath; int newlen; if (add_ppath || add_mpath) { /* Enough to add "PATH=" + path + ";" + ppath + ";" + mpath + \0 */ - newlen = 6 + (path ? _tcslen(path) + 1 : 0); + newlen = 6 + (path ? wcslen(path) + 1 : 0); if (add_ppath) - newlen += _tcslen(ppath) + 1; + newlen += wcslen(ppath) + 1; if (add_mpath) - newlen += _tcslen(mpath) + 1; - newpath = malloc(newlen * sizeof(TCHAR)); + newlen += wcslen(mpath) + 1; + newpath = malloc(newlen * sizeof(wchar_t)); - _sntprintf(newpath, newlen, _T("PATH=%s%s%s%s%s%s"), - path ? path : _T(""), - path ? _T(";") : _T(""), - add_ppath ? ppath : _T(""), - add_ppath ? _T(";") : _T(""), - add_mpath ? mpath : _T(""), - add_mpath ? _T(";") : _T("")); + _snwprintf(newpath, newlen, L"PATH=%s%s%s%s%s%s", + path ? path : L"", + path ? L";" : L"", + add_ppath ? ppath : L"", + add_ppath ? L";" : L"", + add_mpath ? mpath : L"", + add_mpath ? L";" : L""); - _tprintf(_T("New PATH: %s\n"), newpath); + wprintf(L"New PATH: %s\n", newpath); - _tputenv(newpath); + _wputenv(newpath); free(newpath); } } @@ -504,7 +501,7 @@ static BOOL winpidgin_set_running(BOOL fail_if_running) { HANDLE h; - if ((h = CreateMutex(NULL, FALSE, _T("pidgin_is_running")))) { + if ((h = CreateMutexW(NULL, FALSE, L"pidgin_is_running"))) { DWORD err = GetLastError(); if (err == ERROR_ALREADY_EXISTS) { if (fail_if_running) { @@ -512,14 +509,14 @@ printf("An instance of Pidgin is already running.\n"); - if((msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL))) + if((msg_win = FindWindowExW(NULL, NULL, L"WinpidginMsgWinCls", NULL))) if(SendMessage(msg_win, PIDGIN_WM_FOCUS_REQUEST, (WPARAM) NULL, (LPARAM) NULL)) return FALSE; /* If we get here, the focus request wasn't successful */ - MessageBox(NULL, - _T("An instance of Pidgin is already running"), + MessageBoxW(NULL, + L"An instance of Pidgin is already running", NULL, MB_OK | MB_TOPMOST); return FALSE; @@ -555,7 +552,7 @@ return; } - if (!(msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL))) { + if (!(msg_win = FindWindowExW(NULL, NULL, L"WinpidginMsgWinCls", NULL))) { printf("Unable to find an instance of Pidgin to handle protocol message.\n"); return; } @@ -576,8 +573,8 @@ GetWindowThreadProcessId(msg_win, &pid); if (!(process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, pid))) { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to open Pidgin process. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to open Pidgin process. (%u) %s\n", (UINT) dw, err_msg); return; } @@ -591,15 +588,15 @@ printf("Unable to send protocol message to Pidgin instance.\n"); } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to write to remote memory. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to write to remote memory. (%u) %s\n", (UINT) dw, err_msg); } VirtualFreeEx(process, remote_msg, 0, MEM_RELEASE); } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to allocate remote memory. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to allocate remote memory. (%u) %s\n", (UINT) dw, err_msg); } CloseHandle(process); @@ -610,11 +607,11 @@ int _stdcall WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance, char *lpszCmdLine, int nCmdShow) { - TCHAR errbuf[512]; - TCHAR pidgin_dir[MAX_PATH]; - TCHAR exe_name[MAX_PATH]; + wchar_t errbuf[512]; + wchar_t pidgin_dir[MAX_PATH]; + wchar_t exe_name[MAX_PATH]; HMODULE hmod; - TCHAR *tmp; + wchar_t *tmp; wchar_t *wtmp; int pidgin_argc; char **pidgin_argv; /* This is in utf-8 */ @@ -654,7 +651,7 @@ * (_istty() doesn't work for stuff using the GUI subsystem) */ if (_fileno(stdout) == -1 || _fileno(stdout) == -2) { LPFNATTACHCONSOLE MyAttachConsole = NULL; - if ((hmod = GetModuleHandle(_T("kernel32.dll")))) { + if ((hmod = GetModuleHandleW(L"kernel32.dll"))) { MyAttachConsole = (LPFNATTACHCONSOLE) GetProcAddress(hmod, "AttachConsole"); @@ -676,20 +673,20 @@ } /* Load exception handler if we have it */ - if (GetModuleFileName(NULL, pidgin_dir, MAX_PATH) != 0) { + if (GetModuleFileNameW(NULL, pidgin_dir, MAX_PATH) != 0) { /* primitive dirname() */ - tmp = _tcsrchr(pidgin_dir, _T('\\')); + tmp = wcsrchr(pidgin_dir, L'\\'); if (tmp) { HMODULE hmod; - tmp[0] = _T('\0'); + tmp[0] = L'\0'; /* tmp++ will now point to the executable file name */ - _tcscpy(exe_name, tmp + 1); + wcscpy(exe_name, tmp + 1); - _tcscat(pidgin_dir, _T("\\exchndl.dll")); - if ((hmod = LoadLibrary(pidgin_dir))) { + wcscat(pidgin_dir, L"\\exchndl.dll"); + if ((hmod = LoadLibraryW(pidgin_dir))) { FARPROC proc; /* exchndl.dll is built without UNICODE */ char debug_dir[MAX_PATH]; @@ -709,8 +706,7 @@ proc = GetProcAddress(hmod, "SetDebugInfoDir"); if (proc) { char *pidgin_dir_ansi = NULL; - tmp[0] = _T('\0'); -#ifdef _UNICODE + tmp[0] = L'\0'; i = WideCharToMultiByte(CP_ACP, 0, pidgin_dir, -1, NULL, 0, NULL, NULL); if (i != 0) { @@ -722,9 +718,6 @@ pidgin_dir_ansi = NULL; } } -#else - pidgin_dir_ansi = pidgin_dir; -#endif if (pidgin_dir_ansi != NULL) { _snprintf(debug_dir, sizeof(debug_dir) / sizeof(char), "%s\\pidgin-%s-dbgsym", @@ -733,30 +726,28 @@ printf(" Setting exchndl.dll DebugInfoDir to %s\n", debug_dir); (proc)(debug_dir); -#ifdef _UNICODE free(pidgin_dir_ansi); -#endif } } } - tmp[0] = _T('\0'); + tmp[0] = L'\0'; } } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _sntprintf(errbuf, 512, - _T("Error getting module filename.\nError: (%u) %s"), + const wchar_t *err_msg = get_win32_error_message(dw); + _snwprintf(errbuf, 512, + L"Error getting module filename.\nError: (%u) %s", (UINT) dw, err_msg); - _tprintf(_T("%s\n"), errbuf); - MessageBox(NULL, errbuf, NULL, MB_OK | MB_TOPMOST); - pidgin_dir[0] = _T('\0'); + wprintf(L"%s\n", errbuf); + MessageBoxW(NULL, errbuf, NULL, MB_OK | MB_TOPMOST); + pidgin_dir[0] = L'\0'; } /* Determine if we're running in portable mode */ if (wcsstr(cmdLine, L"--portable-mode") - || (exe_name != NULL && _tcsstr(exe_name, _T("-portable.exe")))) { + || (exe_name != NULL && wcsstr(exe_name, L"-portable.exe"))) { printf("Running in PORTABLE mode.\n"); portable_mode = TRUE; } @@ -776,20 +767,20 @@ return 0; /* Now we are ready for Pidgin .. */ - if ((hmod = LoadLibrary(_T("pidgin.dll")))) + if ((hmod = LoadLibraryW(L"pidgin.dll"))) pidgin_main = (LPFNPIDGINMAIN) GetProcAddress(hmod, "pidgin_main"); if (!pidgin_main) { DWORD dw = GetLastError(); BOOL mod_not_found = (dw == ERROR_MOD_NOT_FOUND || dw == ERROR_DLL_NOT_FOUND); - const TCHAR *err_msg = get_win32_error_message(dw); + const wchar_t *err_msg = get_win32_error_message(dw); - _sntprintf(errbuf, 512, _T("Error loading pidgin.dll.\nError: (%u) %s%s%s"), + _snwprintf(errbuf, 512, L"Error loading pidgin.dll.\nError: (%u) %s%s%s", (UINT) dw, err_msg, - mod_not_found ? _T("\n") : _T(""), - mod_not_found ? _T("This probably means that GTK+ can't be found.") : _T("")); - _tprintf(_T("%s\n"), errbuf); - MessageBox(NULL, errbuf, _T("Error"), MB_OK | MB_TOPMOST); + mod_not_found ? L"\n" : L"", + mod_not_found ? L"This probably means that GTK+ can't be found." : L""); + wprintf(L"%s\n", errbuf); + MessageBoxW(NULL, errbuf, L"Error", MB_OK | MB_TOPMOST); return 0; }