Hard-coded DllPairs configuration; there is no need for the user to
change it.
diff --git a/loader/loadorder.c b/loader/loadorder.c
index df47cdd..fad87e2 100644
--- a/loader/loadorder.c
+++ b/loader/loadorder.c
@@ -62,6 +62,23 @@
{NULL,NULL},
};
+static const struct tagDllPair {
+ const char *dll1, *dll2;
+} DllPairs[] = {
+ { "krnl386", "kernel32" },
+ { "gdi", "gdi32" },
+ { "user", "user32" },
+ { "commdlg", "comdlg32" },
+ { "commctrl", "comctl32" },
+ { "ver", "version" },
+ { "shell", "shell32" },
+ { "lzexpand", "lz32" },
+ { "mmsystem", "winmm" },
+ { "msvideo", "msvfw32" },
+ { "winsock", "wsock32" },
+ { NULL, NULL }
+};
+
/***************************************************************************
* cmp_sort_func (internal, static)
*
@@ -343,23 +360,6 @@
* commdlg = native, builtin
* version, ver = elfdll, native, builtin
*
- * Section:
- * [DllPairs]
- *
- * Keys:
- * This is a simple pairing in the form 'name1 = name2'. It is supposed to
- * identify the dlls that cannot live without eachother unless they are
- * loaded in the same format. Examples are common dialogs and controls,
- * shell, kernel, gdi, user, etc...
- * The code will issue a warning if the loadorder of these pairs are different
- * and might cause hard-to-find bugs due to incompatible pairs loaded at
- * run-time. Note that this pairing gives *no* guarantee that the pairs
- * actually get loaded as the same type, nor that the correct versions are
- * loaded (might be implemented later). It merely notes obvious trouble.
- * Examples:
- * kernel = kernel32
- * commdlg = comdlg32
- *
*/
#define BUFFERSIZE 1024
@@ -367,7 +367,10 @@
BOOL MODULE_InitLoadOrder(void)
{
char buffer[BUFFERSIZE];
+ char key[256];
int nbuffer;
+ int idx;
+ const struct tagDllPair *dllpair;
#if defined(HAVE_DL_API)
/* Get/set the new LD_LIBRARY_PATH */
@@ -405,41 +408,14 @@
}
/* Read the explicitely defined orders for specific modules as an entire section */
- nbuffer = PROFILE_GetWineIniString("DllOverrides", NULL, "", buffer, sizeof(buffer));
- if(nbuffer == BUFFERSIZE-2)
- {
- ERR("BUFFERSIZE %d is too small to read [DllOverrides]. Needs to grow in the source\n", BUFFERSIZE);
- return FALSE;
- }
- if(nbuffer)
- {
- /* We only have the keys in the buffer, not the values */
- char *key;
- char value[BUFFERSIZE];
- char *next;
-
- for(key = buffer; *key; key = next)
- {
- next = key + strlen(key) + 1;
-
- nbuffer = PROFILE_GetWineIniString("DllOverrides", key, "", value, sizeof(value));
- if(!nbuffer)
- {
- ERR("Module(s) '%s' will always fail to load. Are you sure you want this?\n", key);
- value[0] = '\0'; /* Just in case */
- }
- if(nbuffer == BUFFERSIZE-2)
- {
- ERR("BUFFERSIZE %d is too small to read [DllOverrides] key '%s'. Needs to grow in the source\n", BUFFERSIZE, key);
- return FALSE;
- }
-
- TRACE("Key '%s' uses override '%s'\n", key, value);
-
- if(!AddLoadOrderSet(key, value, TRUE))
- return FALSE;
- }
- }
+ idx = 0;
+ while (PROFILE_EnumWineIniString( "DllOverrides", idx++, key, sizeof(key),
+ buffer, sizeof(buffer)))
+ {
+ TRACE("Key '%s' uses override '%s'\n", key, buffer);
+ if(!AddLoadOrderSet(key, buffer, TRUE))
+ return FALSE;
+ }
/* Add the commandline overrides to the pool */
if(!ParseCommandlineOverrides())
@@ -460,45 +436,17 @@
qsort(module_loadorder, nmodule_loadorder, sizeof(module_loadorder[0]), cmp_sort_func);
/* Check the pairs of dlls */
- nbuffer = PROFILE_GetWineIniString("DllPairs", NULL, "", buffer, sizeof(buffer));
- if(nbuffer == BUFFERSIZE-2)
- {
- ERR("BUFFERSIZE %d is too small to read [DllPairs]. Needs to grow in the source\n", BUFFERSIZE);
- return FALSE;
- }
- if(nbuffer)
- {
- /* We only have the keys in the buffer, not the values */
- char *key;
- char value[BUFFERSIZE];
- char *next;
-
- for(key = buffer; *key; key = next)
- {
- module_loadorder_t *plo1, *plo2;
-
- next = key + strlen(key) + 1;
-
- nbuffer = PROFILE_GetWineIniString("DllPairs", key, "", value, sizeof(value));
- if(!nbuffer)
- {
- ERR("Module pair '%s' is not associated with another module?\n", key);
- continue;
- }
- if(nbuffer == BUFFERSIZE-2)
- {
- ERR("BUFFERSIZE %d is too small to read [DllPairs] key '%s'. Needs to grow in the source\n", BUFFERSIZE, key);
- return FALSE;
- }
-
- plo1 = MODULE_GetLoadOrder(key);
- plo2 = MODULE_GetLoadOrder(value);
- assert(plo1 && plo2);
-
- if(memcmp(plo1->loadorder, plo2->loadorder, sizeof(plo1->loadorder)))
- MESSAGE("Warning: Modules '%s' and '%s' have different loadorder which may cause trouble\n", key, value);
- }
- }
+ dllpair = DllPairs;
+ while (dllpair->dll1)
+ {
+ module_loadorder_t *plo1, *plo2;
+ plo1 = MODULE_GetLoadOrder(dllpair->dll1);
+ plo2 = MODULE_GetLoadOrder(dllpair->dll2);
+ assert(plo1 && plo2);
+ if(memcmp(plo1->loadorder, plo2->loadorder, sizeof(plo1->loadorder)))
+ MESSAGE("Warning: Modules '%s' and '%s' have different loadorder which may cause trouble\n", dllpair->dll1, dllpair->dll2);
+ dllpair++;
+ }
if(TRACE_ON(module))
{