comparison libpurple/win32/win32dep.c @ 30897:7be961ff3fa2

Make wpurple_find_and_loadproc() work for non-ASCII full paths
author Daniel Atallah <daniel.atallah@gmail.com>
date Tue, 31 Aug 2010 00:51:41 +0000
parents 10ea601e6502
children 31c2dd632ffa
comparison
equal deleted inserted replaced
30894:ae954cc1abb5 30897:7be961ff3fa2
75 FARPROC wpurple_find_and_loadproc(const char *dllname, const char *procedure) { 75 FARPROC wpurple_find_and_loadproc(const char *dllname, const char *procedure) {
76 HMODULE hmod; 76 HMODULE hmod;
77 BOOL did_load = FALSE; 77 BOOL did_load = FALSE;
78 FARPROC proc = 0; 78 FARPROC proc = 0;
79 79
80 if(!(hmod = GetModuleHandle(dllname))) { 80 wchar_t *wc_dllname = g_utf8_to_utf16(dllname, -1, NULL, NULL, NULL);
81
82 if(!(hmod = GetModuleHandleW(wc_dllname))) {
81 purple_debug_warning("wpurple", "%s not already loaded; loading it...\n", dllname); 83 purple_debug_warning("wpurple", "%s not already loaded; loading it...\n", dllname);
82 if(!(hmod = LoadLibrary(dllname))) { 84 if(!(hmod = LoadLibraryW(wc_dllname))) {
83 purple_debug_error("wpurple", "Could not load: %s\n", dllname); 85 purple_debug_error("wpurple", "Could not load: %s\n", dllname);
86 g_free(wc_dllname);
84 return NULL; 87 return NULL;
85 } 88 }
86 else 89 else
87 did_load = TRUE; 90 did_load = TRUE;
88 } 91 }
92
93 g_free(wc_dllname);
94 wc_dllname = NULL;
89 95
90 if((proc = GetProcAddress(hmod, procedure))) { 96 if((proc = GetProcAddress(hmod, procedure))) {
91 purple_debug_info("wpurple", "This version of %s contains %s\n", 97 purple_debug_info("wpurple", "This version of %s contains %s\n",
92 dllname, procedure); 98 dllname, procedure);
93 return proc; 99 return proc;