Group commit for recovery after disk crash.
See Changelog for changes WRT release 990110.
diff --git a/loader/ne/segment.c b/loader/ne/segment.c
index a40ee19..b452266 100644
--- a/loader/ne/segment.c
+++ b/loader/ne/segment.c
@@ -93,6 +93,8 @@
DWORD oldstack;
WORD old_hSeg, new_hSeg;
THDB *thdb = THREAD_Current();
+ HFILE32 hFile32;
+ HFILE16 hFile16;
selfloadheader = (SELFLOADHEADER *)
PTR_SEG_OFF_TO_LIN(SEL(pSegTable->hSeg),0);
@@ -111,12 +113,14 @@
stack16Top->cs = 0;
TRACE(dll,"CallLoadAppSegProc(hmodule=0x%04x,hf=0x%04x,segnum=%d\n",
pModule->self,hf,segnum );
+ DuplicateHandle( GetCurrentProcess(), hf, GetCurrentProcess(), &hFile32,
+ 0, FALSE, DUPLICATE_SAME_ACCESS );
+ hFile16 = FILE_AllocDosHandle( hFile32 );
new_hSeg = Callbacks->CallLoadAppSegProc(selfloadheader->LoadAppSeg,
- pModule->self,
- HFILE32_TO_HFILE16(hf),
+ pModule->self, hFile16,
segnum );
TRACE(dll,"Ret CallLoadAppSegProc: hSeg = 0x%04x\n",new_hSeg);
- _lclose32( hf );
+ _lclose16( hFile16 );
if (SEL(new_hSeg) != SEL(old_hSeg)) {
/* Self loaders like creating their own selectors;
* they love asking for trouble to Wine developers
@@ -390,6 +394,7 @@
if (pModule->flags & NE_FFLAGS_SELFLOAD)
{
HFILE32 hf;
+ HFILE16 hFile16;
/* Handle self loading modules */
SELFLOADHEADER *selfloadheader;
STACK16FRAME *stack16Top;
@@ -422,13 +427,14 @@
stack16Top->ip = 0;
stack16Top->cs = 0;
- hf = NE_OpenFile( pModule );
- TRACE(dll,"CallBootAppProc(hModule=0x%04x,hf=0x%04x)\n",pModule->self,
- HFILE32_TO_HFILE16(hf));
- Callbacks->CallBootAppProc(selfloadheader->BootApp, pModule->self,
- HFILE32_TO_HFILE16(hf));
+ DuplicateHandle( GetCurrentProcess(), NE_OpenFile(pModule),
+ GetCurrentProcess(), &hf, 0, FALSE, DUPLICATE_SAME_ACCESS );
+ hFile16 = FILE_AllocDosHandle( hf );
+ TRACE(dll,"CallBootAppProc(hModule=0x%04x,hf=0x%04x)\n",
+ pModule->self,hFile16);
+ Callbacks->CallBootAppProc(selfloadheader->BootApp, pModule->self,hFile16);
TRACE(dll,"Return from CallBootAppProc\n");
- _lclose32(hf);
+ _lclose16(hf);
/* some BootApp procs overwrite the segment handle of dgroup */
pSegTable[pModule->dgroup - 1].hSeg = saved_hSeg;
thdb->cur_stack = oldstack;