attached you find a patch which imporves the compiled-in loadorder detection a little bit.
It adds a "win16" flag which states whether the module under scrutiny is a reserved name under Win16, only.
Surely some more of the names in the default_loadorder should be marked alike. I am not sure which ones should be changed here. Who can help ?
Dominik
ChangeLog:
Dominik Strasser: add a flag to distinguish reserved names between Win16 and Win32 in default loadorder
Index: loader/loadorder.c =================================================================== RCS file: /home/wine/wine/loader/loadorder.c,v retrieving revision 1.63 diff -u -3 -p -u -r1.63 loadorder.c --- loader/loadorder.c 27 Apr 2003 00:40:23 -0000 1.63 +++ loader/loadorder.c 16 Aug 2003 08:38:04 -0000 @@ -41,6 +41,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(module); typedef struct module_loadorder { const char *modulename; + int win16_flag; enum loadorder_type loadorder[LOADORDER_NTYPES]; } module_loadorder_t; @@ -55,36 +56,36 @@ struct loadorder_list /* the list must remain sorted by dll name */ static module_loadorder_t default_order_list[] = { - { "display", { LOADORDER_BI, 0, 0 } }, - { "gdi.exe", { LOADORDER_BI, 0, 0 } }, - { "gdi32", { LOADORDER_BI, 0, 0 } }, - { "icmp", { LOADORDER_BI, 0, 0 } }, - { "kernel", { LOADORDER_BI, 0, 0 } }, - { "kernel32", { LOADORDER_BI, 0, 0 } }, - { "keyboard", { LOADORDER_BI, 0, 0 } }, - { "krnl386.exe", { LOADORDER_BI, 0, 0 } }, - { "mmsystem", { LOADORDER_BI, 0, 0 } }, - { "mouse", { LOADORDER_BI, 0, 0 } }, - { "ntdll", { LOADORDER_BI, 0, 0 } }, - { "odbc32", { LOADORDER_BI, 0, 0 } }, - { "system", { LOADORDER_BI, 0, 0 } }, - { "toolhelp", { LOADORDER_BI, 0, 0 } }, - { "ttydrv", { LOADORDER_BI, 0, 0 } }, - { "user.exe", { LOADORDER_BI, 0, 0 } }, - { "user32", { LOADORDER_BI, 0, 0 } }, - { "w32skrnl", { LOADORDER_BI, 0, 0 } }, - { "winaspi", { LOADORDER_BI, 0, 0 } }, - { "winedos", { LOADORDER_BI, 0, 0 } }, - { "wineps", { LOADORDER_BI, 0, 0 } }, - { "wing", { LOADORDER_BI, 0, 0 } }, - { "winmm", { LOADORDER_BI, 0, 0 } }, - { "winsock", { LOADORDER_BI, 0, 0 } }, - { "wnaspi32", { LOADORDER_BI, 0, 0 } }, - { "wow32", { LOADORDER_BI, 0, 0 } }, - { "wprocs", { LOADORDER_BI, 0, 0 } }, - { "ws2_32", { LOADORDER_BI, 0, 0 } }, - { "wsock32", { LOADORDER_BI, 0, 0 } }, - { "x11drv", { LOADORDER_BI, 0, 0 } } + { "display", 0, { LOADORDER_BI, 0, 0 } }, + { "gdi.exe", 0, { LOADORDER_BI, 0, 0 } }, + { "gdi32", 0, { LOADORDER_BI, 0, 0 } }, + { "icmp", 0, { LOADORDER_BI, 0, 0 } }, + { "kernel", 0, { LOADORDER_BI, 0, 0 } }, + { "kernel32", 0, { LOADORDER_BI, 0, 0 } }, + { "keyboard", 0, { LOADORDER_BI, 0, 0 } }, + { "krnl386.exe", 0, { LOADORDER_BI, 0, 0 } }, + { "mmsystem", 0, { LOADORDER_BI, 0, 0 } }, + { "mouse", 0, { LOADORDER_BI, 0, 0 } }, + { "ntdll", 0, { LOADORDER_BI, 0, 0 } }, + { "odbc32", 0, { LOADORDER_BI, 0, 0 } }, + { "system", 1, { LOADORDER_BI, 0, 0 } }, + { "toolhelp", 0, { LOADORDER_BI, 0, 0 } }, + { "ttydrv", 0, { LOADORDER_BI, 0, 0 } }, + { "user.exe", 0, { LOADORDER_BI, 0, 0 } }, + { "user32", 0, { LOADORDER_BI, 0, 0 } }, + { "w32skrnl", 0, { LOADORDER_BI, 0, 0 } }, + { "winaspi", 0, { LOADORDER_BI, 0, 0 } }, + { "winedos", 0, { LOADORDER_BI, 0, 0 } }, + { "wineps", 0, { LOADORDER_BI, 0, 0 } }, + { "wing", 0, { LOADORDER_BI, 0, 0 } }, + { "winmm", 0, { LOADORDER_BI, 0, 0 } }, + { "winsock", 0, { LOADORDER_BI, 0, 0 } }, + { "wnaspi32", 0, { LOADORDER_BI, 0, 0 } }, + { "wow32", 0, { LOADORDER_BI, 0, 0 } }, + { "wprocs", 0, { LOADORDER_BI, 0, 0 } }, + { "ws2_32", 0, { LOADORDER_BI, 0, 0 } }, + { "wsock32", 0, { LOADORDER_BI, 0, 0 } }, + { "x11drv", 0, { LOADORDER_BI, 0, 0 } } }; static const struct loadorder_list default_list = @@ -300,7 +301,7 @@ static BOOL AddLoadOrder(module_loadorde */ static BOOL AddLoadOrderSet(char *key, char *order) { - module_loadorder_t ldo; + module_loadorder_t ldo = { 0 }; char *cptr; /* Parse the loadorder before the rest because strtok is not reentrant */ @@ -362,7 +363,7 @@ void MODULE_AddLoadOrderOption( const ch * default lists. */ static BOOL get_list_load_order( const char *module, const struct loadorder_list *list, - enum loadorder_type lo[] ) + enum loadorder_type lo[], int win32_flag ) { module_loadorder_t tmp, *res = NULL; @@ -370,7 +371,7 @@ static BOOL get_list_load_order( const c /* some bsearch implementations (Solaris) are buggy when the number of items is 0 */ if (list->count && (res = bsearch(&tmp, list->order, list->count, sizeof(list->order[0]), cmp_sort_func))) memcpy( lo, res->loadorder, sizeof(res->loadorder) ); - return (res != NULL); + return (res != NULL) && !(win32_flag && res->win16_flag); } @@ -591,7 +592,7 @@ void MODULE_GetLoadOrder( enum loadorder } /* check command-line first */ - if (get_list_load_order( module+1, &cmdline_list, loadorder )) + if (get_list_load_order( module+1, &cmdline_list, loadorder, 0 )) { TRACE( "got cmdline %s for %s\n", debugstr_loadorder(loadorder), debugstr_a(path) ); @@ -650,7 +651,7 @@ void MODULE_GetLoadOrder( enum loadorder } /* then base name matching compiled-in defaults */ - if (get_list_load_order( basename, &default_list, loadorder )) + if (get_list_load_order( basename, &default_list, loadorder, win32 )) { TRACE( "got compiled-in default %s for %s\n", debugstr_loadorder(loadorder), debugstr_a(path) );