Renamed __wine_(un)register_dll_16 to __wine_dll_(un)register_16 for consistency with the 32-bit version, and also make the register function use the same prototype as the 32-bit one.
diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec index 361057e..abccc15 100644 --- a/dlls/kernel/kernel32.spec +++ b/dlls/kernel/kernel32.spec
@@ -1161,8 +1161,8 @@ # or 'wine_' (for user-visible functions) to avoid namespace conflicts. # 16-bit relays -@ cdecl __wine_register_dll_16(ptr) -@ cdecl __wine_unregister_dll_16(ptr) +@ cdecl __wine_dll_register_16(ptr str) +@ cdecl __wine_dll_unregister_16(ptr) @ varargs __wine_call_from_16_word() @ varargs __wine_call_from_16_long() @ varargs __wine_call_from_16_regs()
diff --git a/dlls/kernel/ne_module.c b/dlls/kernel/ne_module.c index d32d5f8..e2e4866 100644 --- a/dlls/kernel/ne_module.c +++ b/dlls/kernel/ne_module.c
@@ -70,17 +70,22 @@ typedef struct { - const char *file_name; /* module file name */ const void *module; /* module header */ void *code_start; /* 32-bit address of DLL code */ const void *rsrc; /* resources data */ } BUILTIN16_DESCRIPTOR; +struct builtin_dll +{ + const BUILTIN16_DESCRIPTOR *descr; /* module descriptor */ + const char *file_name; /* module file name */ +}; + /* Table of all built-in DLLs */ #define MAX_DLLS 50 -static const BUILTIN16_DESCRIPTOR *builtin_dlls[MAX_DLLS]; +static struct builtin_dll builtin_dlls[MAX_DLLS]; static HINSTANCE16 NE_LoadModule( LPCSTR name, BOOL lib_only ); static BOOL16 NE_FreeModule( HMODULE16 hModule, BOOL call_wep ); @@ -147,23 +152,31 @@ * * Find a descriptor in the list */ -static const BUILTIN16_DESCRIPTOR *find_dll_descr( const char *dllname ) +static const BUILTIN16_DESCRIPTOR *find_dll_descr( const char *dllname, const char **file_name ) { int i; + const IMAGE_DOS_HEADER *mz_header; + const IMAGE_OS2_HEADER *ne_header; + BYTE *name_table; + for (i = 0; i < MAX_DLLS; i++) { - const BUILTIN16_DESCRIPTOR *descr = builtin_dlls[i]; + const BUILTIN16_DESCRIPTOR *descr = builtin_dlls[i].descr; if (descr) { - const IMAGE_OS2_HEADER *pModule = descr->module; - BYTE *name_table = (BYTE *)pModule + pModule->ne_restab; + mz_header = descr->module; + ne_header = (const IMAGE_OS2_HEADER *)((const char *)mz_header + mz_header->e_lfanew); + name_table = (BYTE *)ne_header + ne_header->ne_restab; /* check the dll file name */ - if (!NE_strcasecmp( descr->file_name, dllname )) return descr; + if (!NE_strcasecmp( builtin_dlls[i].file_name, dllname ) || /* check the dll module name (without extension) */ - if (!NE_strncasecmp( dllname, name_table+1, *name_table ) && - !strcmp( dllname + *name_table, ".dll" )) - return descr; + (!NE_strncasecmp( dllname, name_table+1, *name_table ) && + !strcmp( dllname + *name_table, ".dll" ))) + { + *file_name = builtin_dlls[i].file_name; + return builtin_dlls[i].descr; + } } } return NULL; @@ -171,18 +184,19 @@ /*********************************************************************** - * __wine_register_dll_16 (KERNEL32.@) + * __wine_dll_register_16 (KERNEL32.@) * * Register a built-in DLL descriptor. */ -void __wine_register_dll_16( const BUILTIN16_DESCRIPTOR *descr ) +void __wine_dll_register_16( const BUILTIN16_DESCRIPTOR *descr, const char *file_name ) { int i; for (i = 0; i < MAX_DLLS; i++) { - if (builtin_dlls[i]) continue; - builtin_dlls[i] = descr; + if (builtin_dlls[i].descr) continue; + builtin_dlls[i].descr = descr; + builtin_dlls[i].file_name = file_name; break; } assert( i < MAX_DLLS ); @@ -190,18 +204,18 @@ /*********************************************************************** - * __wine_unregister_dll_16 (KERNEL32.@) + * __wine_dll_unregister_16 (KERNEL32.@) * * Unregister a built-in DLL descriptor. */ -void __wine_unregister_dll_16( const BUILTIN16_DESCRIPTOR *descr ) +void __wine_dll_unregister_16( const BUILTIN16_DESCRIPTOR *descr ) { int i; for (i = 0; i < MAX_DLLS; i++) { - if (builtin_dlls[i] != descr) continue; - builtin_dlls[i] = NULL; + if (builtin_dlls[i].descr != descr) continue; + builtin_dlls[i].descr = NULL; break; } } @@ -979,7 +993,7 @@ * * Load a built-in Win16 module. Helper function for NE_LoadBuiltinModule. */ -static HMODULE16 NE_DoLoadBuiltinModule( const BUILTIN16_DESCRIPTOR *descr ) +static HMODULE16 NE_DoLoadBuiltinModule( const BUILTIN16_DESCRIPTOR *descr, const char *file_name ) { NE_MODULE *pModule; HMODULE16 hModule; @@ -991,7 +1005,7 @@ mz_header = descr->module; ne_header = (const IMAGE_OS2_HEADER *)((const BYTE *)mz_header + mz_header->e_lfanew); mapping_size = ne_header->ne_psegrefbytes << ne_header->ne_align; - hModule = build_module( descr->module, mapping_size, descr->file_name ); + hModule = build_module( descr->module, mapping_size, file_name ); if (hModule < 32) return hModule; pModule = GlobalLock16( hModule ); pModule->ne_flags |= NE_FFLAGS_BUILTIN; @@ -1044,6 +1058,7 @@ HMODULE16 hModule; NE_MODULE *pModule; const BUILTIN16_DESCRIPTOR *descr = NULL; + const char *file_name = NULL; char dllname[20], owner[20], *p; const char *basename; int owner_exists; @@ -1067,7 +1082,7 @@ HMODULE mod32 = LoadLibraryA( owner ); if (mod32) { - if (!(descr = find_dll_descr( dllname ))) + if (!(descr = find_dll_descr( dllname, &file_name ))) { FreeLibrary( mod32 ); owner_exists = 0; @@ -1094,8 +1109,8 @@ if (descr) { TRACE("Trying built-in '%s'\n", libname); - hinst = NE_DoLoadBuiltinModule( descr ); - if (hinst > 32) TRACE_(loaddll)("Loaded module %s : builtin\n", debugstr_a(libname)); + hinst = NE_DoLoadBuiltinModule( descr, file_name ); + if (hinst > 32) TRACE_(loaddll)("Loaded module %s : builtin\n", debugstr_a(file_name)); } else {
diff --git a/tools/winebuild/spec16.c b/tools/winebuild/spec16.c index 2abd81b..0ef6b97 100644 --- a/tools/winebuild/spec16.c +++ b/tools/winebuild/spec16.c
@@ -898,12 +898,10 @@ fprintf( outfile, "#include \"poppack.h\"\n\n" ); fprintf( outfile, "static const struct dll_descriptor\n{\n" ); - fprintf( outfile, " const char *file_name;\n" ); fprintf( outfile, " const struct module_data *module;\n" ); fprintf( outfile, " struct code_segment *code_start;\n" ); fprintf( outfile, " const unsigned char *rsrc;\n" ); fprintf( outfile, "} descriptor =\n{\n" ); - fprintf( outfile, " \"%s\",\n", spec->file_name ); fprintf( outfile, " &module,\n" ); fprintf( outfile, " &code_segment,\n" ); fprintf( outfile, " %s\n", res_size ? "resource_data" : "0" ); @@ -918,13 +916,13 @@ fprintf( outfile, "void %s(void)\n" "{\n" - " extern void __wine_register_dll_16( const struct dll_descriptor *descr );\n" - " __wine_register_dll_16( &descriptor );\n" - "}\n", constructor ); + " extern void __wine_dll_register_16( const struct dll_descriptor *descr, const char *file_name );\n" + " __wine_dll_register_16( &descriptor, \"%s\" );\n" + "}\n", constructor, spec->file_name ); fprintf( outfile, "void %s(void)\n" "{\n" - " extern void __wine_unregister_dll_16( const struct dll_descriptor *descr );\n" - " __wine_unregister_dll_16( &descriptor );\n" + " extern void __wine_dll_unregister_16( const struct dll_descriptor *descr );\n" + " __wine_dll_unregister_16( &descriptor );\n" "}\n", destructor ); }