]>
Commit | Line | Data |
---|---|---|
17e7d110 SS |
1 | To: vim-dev@vim.org |
2 | Subject: Patch 7.3.034 | |
3 | Fcc: outbox | |
4 | From: Bram Moolenaar <Bram@moolenaar.net> | |
5 | Mime-Version: 1.0 | |
6 | Content-Type: text/plain; charset=UTF-8 | |
7 | Content-Transfer-Encoding: 8bit | |
8 | ------------ | |
9 | ||
10 | Patch 7.3.034 | |
11 | Problem: Win32: may be loading .dll from the wrong directory. | |
12 | Solution: Go to the Vim executable directory when opening a library. | |
13 | Files: src/gui_w32.c, src/if_lua.c, src/if_mzsch.c, src/if_perl.xs, | |
14 | src/if_python.c, src/if_python3.c, src/if_ruby.c, src/mbyte.c, | |
15 | src/os_mswin.c, src/os_win32.c, src/proto/os_win32.pro | |
16 | ||
17 | ||
18 | *** ../vim-7.3.033/src/gui_w32.c 2010-08-15 21:57:25.000000000 +0200 | |
19 | --- src/gui_w32.c 2010-10-22 21:49:27.000000000 +0200 | |
20 | *************** | |
21 | *** 1260,1266 **** | |
22 | ||
23 | /* try and load the user32.dll library and get the entry points for | |
24 | * multi-monitor-support. */ | |
25 | ! if ((user32_lib = LoadLibrary("User32.dll")) != NULL) | |
26 | { | |
27 | pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, | |
28 | "MonitorFromWindow"); | |
29 | --- 1260,1266 ---- | |
30 | ||
31 | /* try and load the user32.dll library and get the entry points for | |
32 | * multi-monitor-support. */ | |
33 | ! if ((user32_lib = vimLoadLib("User32.dll")) != NULL) | |
34 | { | |
35 | pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, | |
36 | "MonitorFromWindow"); | |
37 | *************** | |
38 | *** 4188,4194 **** | |
39 | static void | |
40 | dyn_imm_load(void) | |
41 | { | |
42 | ! hLibImm = LoadLibrary("imm32.dll"); | |
43 | if (hLibImm == NULL) | |
44 | return; | |
45 | ||
46 | --- 4188,4194 ---- | |
47 | static void | |
48 | dyn_imm_load(void) | |
49 | { | |
50 | ! hLibImm = vimLoadLib("imm32.dll"); | |
51 | if (hLibImm == NULL) | |
52 | return; | |
53 | ||
54 | *** ../vim-7.3.033/src/if_lua.c 2010-08-15 21:57:28.000000000 +0200 | |
55 | --- src/if_lua.c 2010-10-22 21:49:39.000000000 +0200 | |
56 | *************** | |
57 | *** 49,55 **** | |
58 | # define symbol_from_dll dlsym | |
59 | # define close_dll dlclose | |
60 | #else | |
61 | ! # define load_dll LoadLibrary | |
62 | # define symbol_from_dll GetProcAddress | |
63 | # define close_dll FreeLibrary | |
64 | #endif | |
65 | --- 49,55 ---- | |
66 | # define symbol_from_dll dlsym | |
67 | # define close_dll dlclose | |
68 | #else | |
69 | ! # define load_dll vimLoadLib | |
70 | # define symbol_from_dll GetProcAddress | |
71 | # define close_dll FreeLibrary | |
72 | #endif | |
73 | *** ../vim-7.3.033/src/if_mzsch.c 2010-08-15 21:57:32.000000000 +0200 | |
74 | --- src/if_mzsch.c 2010-10-22 21:49:53.000000000 +0200 | |
75 | *************** | |
76 | *** 556,563 **** | |
77 | ||
78 | if (hMzGC && hMzSch) | |
79 | return OK; | |
80 | ! hMzSch = LoadLibrary(sch_dll); | |
81 | ! hMzGC = LoadLibrary(gc_dll); | |
82 | ||
83 | if (!hMzSch) | |
84 | { | |
85 | --- 556,563 ---- | |
86 | ||
87 | if (hMzGC && hMzSch) | |
88 | return OK; | |
89 | ! hMzSch = vimLoadLib(sch_dll); | |
90 | ! hMzGC = vimLoadLib(gc_dll); | |
91 | ||
92 | if (!hMzSch) | |
93 | { | |
94 | *** ../vim-7.3.033/src/if_perl.xs 2010-08-15 21:57:30.000000000 +0200 | |
95 | --- src/if_perl.xs 2010-10-22 21:53:06.000000000 +0200 | |
96 | *************** | |
97 | *** 106,112 **** | |
98 | #define close_dll dlclose | |
99 | #else | |
100 | #define PERL_PROC FARPROC | |
101 | ! #define load_dll LoadLibrary | |
102 | #define symbol_from_dll GetProcAddress | |
103 | #define close_dll FreeLibrary | |
104 | #endif | |
105 | --- 106,112 ---- | |
106 | #define close_dll dlclose | |
107 | #else | |
108 | #define PERL_PROC FARPROC | |
109 | ! #define load_dll vimLoadLib | |
110 | #define symbol_from_dll GetProcAddress | |
111 | #define close_dll FreeLibrary | |
112 | #endif | |
113 | *** ../vim-7.3.033/src/if_python.c 2010-08-15 21:57:28.000000000 +0200 | |
114 | --- src/if_python.c 2010-10-22 21:49:57.000000000 +0200 | |
115 | *************** | |
116 | *** 110,116 **** | |
117 | # define close_dll dlclose | |
118 | # define symbol_from_dll dlsym | |
119 | # else | |
120 | ! # define load_dll LoadLibrary | |
121 | # define close_dll FreeLibrary | |
122 | # define symbol_from_dll GetProcAddress | |
123 | # endif | |
124 | --- 110,116 ---- | |
125 | # define close_dll dlclose | |
126 | # define symbol_from_dll dlsym | |
127 | # else | |
128 | ! # define load_dll vimLoadLib | |
129 | # define close_dll FreeLibrary | |
130 | # define symbol_from_dll GetProcAddress | |
131 | # endif | |
132 | *** ../vim-7.3.033/src/if_python3.c 2010-08-15 21:57:28.000000000 +0200 | |
133 | --- src/if_python3.c 2010-10-22 21:50:01.000000000 +0200 | |
134 | *************** | |
135 | *** 88,94 **** | |
136 | # define close_dll dlclose | |
137 | # define symbol_from_dll dlsym | |
138 | # else | |
139 | ! # define load_dll LoadLibrary | |
140 | # define close_dll FreeLibrary | |
141 | # define symbol_from_dll GetProcAddress | |
142 | # endif | |
143 | --- 88,94 ---- | |
144 | # define close_dll dlclose | |
145 | # define symbol_from_dll dlsym | |
146 | # else | |
147 | ! # define load_dll vimLoadLib | |
148 | # define close_dll FreeLibrary | |
149 | # define symbol_from_dll GetProcAddress | |
150 | # endif | |
151 | *** ../vim-7.3.033/src/if_ruby.c 2010-09-29 13:02:48.000000000 +0200 | |
152 | --- src/if_ruby.c 2010-10-22 21:50:04.000000000 +0200 | |
153 | *************** | |
154 | *** 55,61 **** | |
155 | # define symbol_from_dll dlsym | |
156 | # define close_dll dlclose | |
157 | #else | |
158 | ! # define load_dll LoadLibrary | |
159 | # define symbol_from_dll GetProcAddress | |
160 | # define close_dll FreeLibrary | |
161 | #endif | |
162 | --- 55,61 ---- | |
163 | # define symbol_from_dll dlsym | |
164 | # define close_dll dlclose | |
165 | #else | |
166 | ! # define load_dll vimLoadLib | |
167 | # define symbol_from_dll GetProcAddress | |
168 | # define close_dll FreeLibrary | |
169 | #endif | |
170 | *** ../vim-7.3.033/src/mbyte.c 2010-09-18 13:36:41.000000000 +0200 | |
171 | --- src/mbyte.c 2010-10-22 21:50:09.000000000 +0200 | |
172 | *************** | |
173 | *** 4159,4169 **** | |
174 | { | |
175 | if (hIconvDLL != 0 && hMsvcrtDLL != 0) | |
176 | return TRUE; | |
177 | ! hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL); | |
178 | if (hIconvDLL == 0) /* sometimes it's called libiconv.dll */ | |
179 | ! hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT); | |
180 | if (hIconvDLL != 0) | |
181 | ! hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL); | |
182 | if (hIconvDLL == 0 || hMsvcrtDLL == 0) | |
183 | { | |
184 | /* Only give the message when 'verbose' is set, otherwise it might be | |
185 | --- 4159,4169 ---- | |
186 | { | |
187 | if (hIconvDLL != 0 && hMsvcrtDLL != 0) | |
188 | return TRUE; | |
189 | ! hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL); | |
190 | if (hIconvDLL == 0) /* sometimes it's called libiconv.dll */ | |
191 | ! hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT); | |
192 | if (hIconvDLL != 0) | |
193 | ! hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL); | |
194 | if (hIconvDLL == 0 || hMsvcrtDLL == 0) | |
195 | { | |
196 | /* Only give the message when 'verbose' is set, otherwise it might be | |
197 | *** ../vim-7.3.033/src/os_mswin.c 2010-08-15 21:57:29.000000000 +0200 | |
198 | --- src/os_mswin.c 2010-10-22 22:03:26.000000000 +0200 | |
199 | *************** | |
200 | *** 817,823 **** | |
201 | --- 817,827 ---- | |
202 | BOOL fRunTimeLinkSuccess = FALSE; | |
203 | ||
204 | // Get a handle to the DLL module. | |
205 | + # ifdef WIN16 | |
206 | hinstLib = LoadLibrary(libname); | |
207 | + # else | |
208 | + hinstLib = vimLoadLib(libname); | |
209 | + # endif | |
210 | ||
211 | // If the handle is valid, try to get the function address. | |
212 | if (hinstLib != NULL) | |
213 | *** ../vim-7.3.033/src/os_win32.c 2010-10-13 20:37:37.000000000 +0200 | |
214 | --- src/os_win32.c 2010-10-23 13:16:55.000000000 +0200 | |
215 | *************** | |
216 | *** 206,247 **** | |
217 | static int suppress_winsize = 1; /* don't fiddle with console */ | |
218 | #endif | |
219 | ||
220 | static void | |
221 | get_exe_name(void) | |
222 | { | |
223 | ! char temp[256]; | |
224 | ! static int did_set_PATH = FALSE; | |
225 | ||
226 | if (exe_name == NULL) | |
227 | { | |
228 | /* store the name of the executable, may be used for $VIM */ | |
229 | ! GetModuleFileName(NULL, temp, 255); | |
230 | if (*temp != NUL) | |
231 | exe_name = FullName_save((char_u *)temp, FALSE); | |
232 | } | |
233 | ||
234 | ! if (!did_set_PATH && exe_name != NULL) | |
235 | { | |
236 | ! char_u *p; | |
237 | ! char_u *newpath; | |
238 | ! | |
239 | ! /* Append our starting directory to $PATH, so that when doing "!xxd" | |
240 | ! * it's found in our starting directory. Needed because SearchPath() | |
241 | ! * also looks there. */ | |
242 | ! p = mch_getenv("PATH"); | |
243 | ! newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2)); | |
244 | ! if (newpath != NULL) | |
245 | ! { | |
246 | ! STRCPY(newpath, p); | |
247 | ! STRCAT(newpath, ";"); | |
248 | ! vim_strncpy(newpath + STRLEN(newpath), exe_name, | |
249 | ! gettail_sep(exe_name) - exe_name); | |
250 | ! vim_setenv((char_u *)"PATH", newpath); | |
251 | ! vim_free(newpath); | |
252 | } | |
253 | ||
254 | ! did_set_PATH = TRUE; | |
255 | } | |
256 | } | |
257 | ||
258 | #if defined(DYNAMIC_GETTEXT) || defined(PROTO) | |
259 | --- 206,268 ---- | |
260 | static int suppress_winsize = 1; /* don't fiddle with console */ | |
261 | #endif | |
262 | ||
263 | + static char_u *exe_path = NULL; | |
264 | + | |
265 | static void | |
266 | get_exe_name(void) | |
267 | { | |
268 | ! char temp[MAXPATHL]; | |
269 | ! char_u *p; | |
270 | ||
271 | if (exe_name == NULL) | |
272 | { | |
273 | /* store the name of the executable, may be used for $VIM */ | |
274 | ! GetModuleFileName(NULL, temp, MAXPATHL - 1); | |
275 | if (*temp != NUL) | |
276 | exe_name = FullName_save((char_u *)temp, FALSE); | |
277 | } | |
278 | ||
279 | ! if (exe_path == NULL && exe_name != NULL) | |
280 | { | |
281 | ! exe_path = vim_strnsave(exe_name, gettail_sep(exe_name) - exe_name); | |
282 | ! if (exe_path != NULL) | |
283 | ! { | |
284 | ! /* Append our starting directory to $PATH, so that when doing | |
285 | ! * "!xxd" it's found in our starting directory. Needed because | |
286 | ! * SearchPath() also looks there. */ | |
287 | ! p = mch_getenv("PATH"); | |
288 | ! if (STRLEN(p) + STRLEN(exe_path) + 2 < MAXPATHL); | |
289 | ! { | |
290 | ! STRCPY(temp, p); | |
291 | ! STRCAT(temp, ";"); | |
292 | ! STRCAT(temp, exe_path); | |
293 | ! vim_setenv((char_u *)"PATH", temp); | |
294 | ! } | |
295 | } | |
296 | + } | |
297 | + } | |
298 | + | |
299 | + /* | |
300 | + * Load library "name". | |
301 | + */ | |
302 | + HINSTANCE | |
303 | + vimLoadLib(char *name) | |
304 | + { | |
305 | + HINSTANCE dll = NULL; | |
306 | + char old_dir[MAXPATHL]; | |
307 | ||
308 | ! if (exe_path == NULL) | |
309 | ! get_exe_name(); | |
310 | ! if (exe_path != NULL && mch_dirname(old_dir, MAXPATHL) == OK) | |
311 | ! { | |
312 | ! /* Change directory to where the executable is, both to make sure we | |
313 | ! * find a .dll there and to avoid looking for a .dll in the current | |
314 | ! * directory. */ | |
315 | ! mch_chdir(exe_path); | |
316 | ! dll = LoadLibrary(name); | |
317 | ! mch_chdir(old_dir); | |
318 | } | |
319 | + return dll; | |
320 | } | |
321 | ||
322 | #if defined(DYNAMIC_GETTEXT) || defined(PROTO) | |
323 | *************** | |
324 | *** 254,260 **** | |
325 | static char *null_libintl_bindtextdomain(const char *, const char *); | |
326 | static char *null_libintl_bind_textdomain_codeset(const char *, const char *); | |
327 | ||
328 | ! static HINSTANCE hLibintlDLL = 0; | |
329 | char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext; | |
330 | char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain; | |
331 | char *(*dyn_libintl_bindtextdomain)(const char *, const char *) | |
332 | --- 275,281 ---- | |
333 | static char *null_libintl_bindtextdomain(const char *, const char *); | |
334 | static char *null_libintl_bind_textdomain_codeset(const char *, const char *); | |
335 | ||
336 | ! static HINSTANCE hLibintlDLL = NULL; | |
337 | char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext; | |
338 | char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain; | |
339 | char *(*dyn_libintl_bindtextdomain)(const char *, const char *) | |
340 | *************** | |
341 | *** 282,307 **** | |
342 | if (hLibintlDLL) | |
343 | return 1; | |
344 | /* Load gettext library (libintl.dll) */ | |
345 | ! hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL); | |
346 | if (!hLibintlDLL) | |
347 | { | |
348 | ! char_u dirname[_MAX_PATH]; | |
349 | ! | |
350 | ! /* Try using the path from gvim.exe to find the .dll there. */ | |
351 | ! get_exe_name(); | |
352 | ! STRCPY(dirname, exe_name); | |
353 | ! STRCPY(gettail(dirname), GETTEXT_DLL); | |
354 | ! hLibintlDLL = LoadLibrary((char *)dirname); | |
355 | ! if (!hLibintlDLL) | |
356 | { | |
357 | ! if (p_verbose > 0) | |
358 | ! { | |
359 | ! verbose_enter(); | |
360 | ! EMSG2(_(e_loadlib), GETTEXT_DLL); | |
361 | ! verbose_leave(); | |
362 | ! } | |
363 | ! return 0; | |
364 | } | |
365 | } | |
366 | for (i = 0; libintl_entry[i].name != NULL | |
367 | && libintl_entry[i].ptr != NULL; ++i) | |
368 | --- 303,318 ---- | |
369 | if (hLibintlDLL) | |
370 | return 1; | |
371 | /* Load gettext library (libintl.dll) */ | |
372 | ! hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL); | |
373 | if (!hLibintlDLL) | |
374 | { | |
375 | ! if (p_verbose > 0) | |
376 | { | |
377 | ! verbose_enter(); | |
378 | ! EMSG2(_(e_loadlib), GETTEXT_DLL); | |
379 | ! verbose_leave(); | |
380 | } | |
381 | + return 0; | |
382 | } | |
383 | for (i = 0; libintl_entry[i].name != NULL | |
384 | && libintl_entry[i].ptr != NULL; ++i) | |
385 | *************** | |
386 | *** 430,436 **** | |
387 | * Seems like a lot of overhead to load/unload ADVAPI32.DLL each | |
388 | * time we verify security... | |
389 | */ | |
390 | ! advapi_lib = LoadLibrary("ADVAPI32.DLL"); | |
391 | if (advapi_lib != NULL) | |
392 | { | |
393 | pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib, | |
394 | --- 441,447 ---- | |
395 | * Seems like a lot of overhead to load/unload ADVAPI32.DLL each | |
396 | * time we verify security... | |
397 | */ | |
398 | ! advapi_lib = vimLoadLib("ADVAPI32.DLL"); | |
399 | if (advapi_lib != NULL) | |
400 | { | |
401 | pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib, | |
402 | *** ../vim-7.3.033/src/proto/os_win32.pro 2010-08-15 21:57:28.000000000 +0200 | |
403 | --- src/proto/os_win32.pro 2010-10-22 22:05:35.000000000 +0200 | |
404 | *************** | |
405 | *** 1,4 **** | |
406 | --- 1,5 ---- | |
407 | /* os_win32.c */ | |
408 | + HINSTANCE vimLoadLib __ARGS((char *name)); | |
409 | int dyn_libintl_init __ARGS((char *libname)); | |
410 | void dyn_libintl_end __ARGS((void)); | |
411 | void PlatformId __ARGS((void)); | |
412 | *** ../vim-7.3.033/src/version.c 2010-10-22 22:13:47.000000000 +0200 | |
413 | --- src/version.c 2010-10-23 13:55:21.000000000 +0200 | |
414 | *************** | |
415 | *** 716,717 **** | |
416 | --- 716,719 ---- | |
417 | { /* Add new patch number below this line */ | |
418 | + /**/ | |
419 | + 34, | |
420 | /**/ | |
421 | ||
422 | -- | |
423 | This is the polymorph virus! Follow these instructions carefully: | |
424 | 1. Send this message to everybody you know. | |
425 | 2. Format your harddisk. | |
426 | Thank you for your cooperation in spreading the most powerful virus ever! | |
427 | ||
428 | /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ | |
429 | /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ | |
430 | \\\ download, build and distribute -- http://www.A-A-P.org /// | |
431 | \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |