Alexandre Julliard : kernel32: Add helper functions for building the load path.
Alexandre Julliard
julliard at winehq.org
Tue Aug 29 14:48:24 CDT 2017
Module: wine
Branch: master
Commit: 8abbfbbe2431c1e09aede38531635a0c8b12bc3a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8abbfbbe2431c1e09aede38531635a0c8b12bc3a
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Aug 29 09:33:07 2017 +0200
kernel32: Add helper functions for building the load path.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/module.c | 60 +++++++++++++++++++++++++++++---------------------
1 file changed, 35 insertions(+), 25 deletions(-)
diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index 54a04be..30f33a6 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -888,6 +888,32 @@ static inline const WCHAR *get_module_path_end(const WCHAR *module)
return mod_end;
}
+
+/******************************************************************
+ * append_path_len
+ *
+ * Append a counted string to the load path. Helper for MODULE_get_dll_load_path.
+ */
+static inline WCHAR *append_path_len( WCHAR *p, const WCHAR *str, DWORD len )
+{
+ if (!len) return p;
+ memcpy( p, str, len * sizeof(WCHAR) );
+ p[len] = ';';
+ return p + len + 1;
+}
+
+
+/******************************************************************
+ * append_path
+ *
+ * Append a string to the load path. Helper for MODULE_get_dll_load_path.
+ */
+static inline WCHAR *append_path( WCHAR *p, const WCHAR *str )
+{
+ return append_path_len( p, str, strlenW(str) );
+}
+
+
/******************************************************************
* MODULE_get_dll_load_path
*
@@ -897,6 +923,7 @@ static inline const WCHAR *get_module_path_end(const WCHAR *module)
WCHAR *MODULE_get_dll_load_path( LPCWSTR module )
{
static const WCHAR pathW[] = {'P','A','T','H',0};
+ static const WCHAR dotW[] = {'.',0};
const WCHAR *system_path = get_dll_system_path();
const WCHAR *mod_end = NULL;
@@ -935,31 +962,14 @@ WCHAR *MODULE_get_dll_load_path( LPCWSTR module )
else len += 2; /* current directory */
if ((p = ret = HeapAlloc( GetProcessHeap(), 0, path_len + len * sizeof(WCHAR) )))
{
- if (module)
- {
- memcpy( ret, module, (mod_end - module) * sizeof(WCHAR) );
- p += (mod_end - module);
- *p++ = ';';
- }
- if (dll_directory)
- {
- strcpyW( p, dll_directory );
- p += strlenW(p);
- *p++ = ';';
- }
- else if (!safe_mode)
- {
- *p++ = '.';
- *p++ = ';';
- }
- strcpyW( p, system_path );
- p += strlenW(p);
- *p++ = ';';
- if (!dll_directory && safe_mode)
- {
- *p++ = '.';
- *p++ = ';';
- }
+ if (module) p = append_path_len( p, module, mod_end - module );
+
+ if (dll_directory) p = append_path( p, dll_directory );
+ else if (!safe_mode) p = append_path( p, dotW );
+
+ p = append_path( p, system_path );
+
+ if (!dll_directory && safe_mode) p = append_path( p, dotW );
}
RtlLeaveCriticalSection( &dlldir_section );
if (!ret) return NULL;
More information about the wine-cvs
mailing list