From f2f9b04b5ce442b25ba86b1f61d6a15c76f7b126 Mon Sep 17 00:00:00 2001 From: Ulf Wohlers Date: Thu, 24 Jul 2003 10:31:41 +0000 Subject: [PATCH] DOS_Execute: Moved creation of psp after closing exe, to avoid dead file handle of exe in copied psp. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1144 --- src/dos/dos_execute.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index 57eff983..4c4147f7 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -292,9 +292,6 @@ bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { else memsize=maxsize; if (!DOS_AllocateMemory(&pspseg,&memsize)) E_Exit("DOS:Exec error in memory"); loadseg=pspseg+16; - /* Setup a psp */ - SetupPSP(pspseg,memsize,envseg); - SetupCMDLine(pspseg,block); } else loadseg=block.overlay.loadseg; /* Load the executable */ Bit8u * loadbuf=(Bit8u *)new Bit8u[0x10000]; @@ -331,6 +328,14 @@ bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { } delete[] loadbuf; DOS_CloseFile(fhandle); + + /* Setup a psp */ + if (flags!=OVERLAY) { + // Create psp after closing exe, to avoid dead file handle of exe in copied psp + SetupPSP(pspseg,memsize,envseg); + SetupCMDLine(pspseg,block); + }; + CALLBACK_SCF(false); /* Carry flag cleared for caller if successfull */ if (flags==OVERLAY) return true; /* Everything done for overlays */ RealPt csip,sssp;