CVS: winex/loader pe_image.c,1.20,1.21

[email protected] 31 Jul 2007 19:49:04 -0000
Newsgroups gmane.comp.emulators.winex.cvs
Message-ID <[email protected]>
Subject: winex/loader pe_image.c,1.20,1.21Update of /var/lib/cvsd/cvsroot/winex/loader
In directory agravaine:/tmp/cvs-serv796/loader

Modified Files:
	pe_image.c 
Log Message:

- reorganize PE_fixup_imports a bit by consolidating two sections


Index: pe_image.c
===================================================================
RCS file: /var/lib/cvsd/cvsroot/winex/loader/pe_image.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- pe_image.c	31 Jul 2007 19:48:55 -0000	1.20
+++ pe_image.c	31 Jul 2007 19:49:02 -0000	1.21
@@ -315,81 +315,50 @@
 
 	/* FIXME: forwarder entries ... */
 
-	if (pe_imp->u.OriginalFirstThunk != 0) { /* original MS style */
-	    TRACE("Microsoft style imports used\n");
-	    import_list =(PIMAGE_THUNK_DATA) RVA(pe_imp->u.OriginalFirstThunk);
-	    thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
-
-	    while (import_list->u1.Ordinal) {
-		if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal)) {
-		    int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
+        thunk_list = RVA (pe_imp->FirstThunk);
+	if (pe_imp->u.OriginalFirstThunk != 0) /* original MS style */
+           import_list = (PIMAGE_THUNK_DATA)RVA (pe_imp->u.OriginalFirstThunk);
+        else
+           import_list = thunk_list;
 
-		    TRACE("--- Ordinal %s,%d\n", name, ordinal);
-		    thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
-                        wmImp->module, (LPCSTR)ordinal, TRUE
-		    );
-		    if (!thunk_list->u1.Function) {
-			ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
-				name, ordinal, wm->filename );
-                        thunk_list->u1.Function = (PDWORD)0xdeadbeef;
-		    }
-		    else
-		        TRACE_(fixup)("%s MS Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
-		    
-		} else {		/* import by name */
-		    pe_name = (PIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
-		    TRACE("--- %s %s.%d\n", pe_name->Name, name, pe_name->Hint);
-		    thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
-                        wmImp->module, (LPCSTR)pe_name->Name, TRUE
-		    );
-		    if (!thunk_list->u1.Function) {
-			ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
-				name,pe_name->Hint,pe_name->Name,wm->filename);
-                        thunk_list->u1.Function = (PDWORD)0xdeadbeef;
-		    }
-		    else
-		        TRACE_(fixup)("%s MS Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
-		}
-		import_list++;
-		thunk_list++;
-	    }
-	} else {	/* Borland style */
-	    TRACE("Borland style imports used\n");
-	    thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk);
-	    while (thunk_list->u1.Ordinal) {
-		if (IMAGE_SNAP_BY_ORDINAL(thunk_list->u1.Ordinal)) {
-		    /* not sure about this branch, but it seems to work */
-		    int ordinal = IMAGE_ORDINAL(thunk_list->u1.Ordinal);
+        while (import_list->u1.Ordinal)
+        {
+           if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal))
+           {
+              int ordinal = IMAGE_ORDINAL(import_list->u1.Ordinal);
 
-		    TRACE("--- Ordinal %s.%d\n",name,ordinal);
-		    thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
-                        wmImp->module, (LPCSTR) ordinal, TRUE
-		    );
-		    if (!thunk_list->u1.Function) {
-			ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
-				name,ordinal, wm->filename);
-                        thunk_list->u1.Function = (PDWORD)0xdeadbeef;
-		    }
-		    else
-		        TRACE_(fixup)("%s Borland Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
-		} else {
-		    pe_name=(PIMAGE_IMPORT_BY_NAME) RVA(thunk_list->u1.AddressOfData);
-		    TRACE("--- %s %s.%d\n",
-		   		  pe_name->Name,name,pe_name->Hint);
-		    thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress(
-                        wmImp->module, (LPCSTR)pe_name->Name, TRUE
-		    );
-		    if (!thunk_list->u1.Function) {
-		    	ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
-				name, pe_name->Hint, pe_name->Name, wm->filename);
-                        thunk_list->u1.Function = (PDWORD)0xdeadbeef;
-		    }
-		    else
-		        TRACE_(fixup)("%s Borland Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
-		}
-		thunk_list++;
-	    }
-	}
+              TRACE("--- Ordinal %s,%d\n", name, ordinal);
+              thunk_list->u1.Function =
+                 (PDWORD)MODULE_GetProcAddress (wmImp->module, (LPCSTR)ordinal,
+                                                TRUE);
+              if (!thunk_list->u1.Function)
+              {
+                 ERR_(fixup)("No implementation for %s.%d imported from %s, setting to 0xdeadbeef\n",
+                             name, ordinal, wm->filename );
+                 thunk_list->u1.Function = (PDWORD)0xdeadbeef;
+              }
+              else
+                 TRACE_(fixup)("%s Ordinal Import %s.%d found\n", wm->filename, name, ordinal);
+           }
+           else
+           { /* import by name */
+              pe_name = (PIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData);
+              TRACE("--- %s %s.%d\n", pe_name->Name, name, pe_name->Hint);
+              thunk_list->u1.Function =
+                 (PDWORD)MODULE_GetProcAddress (wmImp->module,
+                                                (LPCSTR)pe_name->Name, TRUE);
+              if (!thunk_list->u1.Function)
+              {
+                 ERR_(fixup)("No implementation for %s.%d(%s) imported from %s, setting to 0xdeadbeef\n",
+                             name,pe_name->Hint,pe_name->Name,wm->filename);
+                 thunk_list->u1.Function = (PDWORD)0xdeadbeef;
+              }
+              else
+                 TRACE_(fixup)("%s Named Import %s.%d(%s) found\n", wm->filename, name, pe_name->Hint, pe_name->Name );
+           }
+           import_list++;
+           thunk_list++;
+        }
     }
     return r;
 }