1
0
Fork 0

re-fix deleting of hostwise open files (makes Alien Carnage work again without breaking Abuse)

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2722
This commit is contained in:
Sebastian Strohhäcker 2006-11-14 20:01:42 +00:00
parent 26bc8da23d
commit af1673c6f2
5 changed files with 21 additions and 17 deletions

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: dos_system.h,v 1.36 2006-06-22 13:15:07 qbix79 Exp $ */
/* $Id: dos_system.h,v 1.37 2006-11-14 20:01:42 c2woody Exp $ */
#ifndef DOSBOX_DOS_SYSTEM_H
#define DOSBOX_DOS_SYSTEM_H
@ -96,10 +96,14 @@ private:
class DOS_Device : public DOS_File {
public:
DOS_Device(const DOS_Device& orig):DOS_File(orig) {devnum=orig.devnum; }
DOS_Device(const DOS_Device& orig):DOS_File(orig) {
devnum=orig.devnum;
open=true;
}
DOS_Device & operator= (const DOS_Device & orig) {
DOS_File::operator=(orig);
devnum=orig.devnum;
open=true;
return *this;
}
DOS_Device():DOS_File(),devnum(0){};

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: dos_files.cpp,v 1.78 2006-08-05 10:39:44 qbix79 Exp $ */
/* $Id: dos_files.cpp,v 1.79 2006-11-14 20:01:42 c2woody Exp $ */
#include <string.h>
#include <stdlib.h>
@ -307,7 +307,7 @@ bool DOS_ReadFile(Bit16u entry,Bit8u * data,Bit16u * amount) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[handle]) {
if (!Files[handle] || !Files[handle]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
@ -330,7 +330,7 @@ bool DOS_WriteFile(Bit16u entry,Bit8u * data,Bit16u * amount) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[handle]) {
if (!Files[handle] || !Files[handle]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
@ -353,7 +353,7 @@ bool DOS_SeekFile(Bit16u entry,Bit32u * pos,Bit32u type) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[handle]) {
if (!Files[handle] || !Files[handle]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
@ -370,7 +370,9 @@ bool DOS_CloseFile(Bit16u entry) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
Files[handle]->Close();
if (Files[handle]->IsOpen()) {
Files[handle]->Close();
}
DOS_PSP psp(dos.psp());
psp.SetFileHandle(entry,0xff);
if (Files[handle]->RemoveRef()<=0) {
@ -576,7 +578,7 @@ bool DOS_DuplicateEntry(Bit16u entry,Bit16u * newentry) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[handle]) {
if (!Files[handle] || !Files[handle]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
@ -601,7 +603,7 @@ bool DOS_ForceDuplicateEntry(Bit16u entry,Bit16u newentry) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[orig]) {
if (!Files[orig] || !Files[orig]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
@ -1037,7 +1039,7 @@ bool DOS_GetFileDate(Bit16u entry, Bit16u* otime, Bit16u* odate)
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};
if (!Files[handle]) {
if (!Files[handle] || !Files[handle]->IsOpen()) {
DOS_SetError(DOSERR_INVALID_HANDLE);
return false;
};

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: drive_fat.cpp,v 1.18 2006-07-05 21:18:14 c2woody Exp $ */
/* $Id: drive_fat.cpp,v 1.19 2006-11-14 20:01:42 c2woody Exp $ */
#include <stdio.h>
#include <stdlib.h>
@ -91,6 +91,7 @@ fatFile::fatFile(const char* /*name*/, Bit32u startCluster, Bit32u fileLen, fatD
firstCluster = startCluster;
myDrive = useDrive;
filelength = fileLen;
open = true;
loadedSector = false;
curSectOff = 0;
seekpos = 0;

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: drive_local.cpp,v 1.71 2006-08-17 12:07:22 c2woody Exp $ */
/* $Id: drive_local.cpp,v 1.72 2006-11-14 20:01:42 c2woody Exp $ */
#include <stdio.h>
#include <stdlib.h>
@ -160,11 +160,7 @@ bool localDrive::FileUnlink(char * name) {
Bitu max = DOS_FILES;
while(Files[i]->IsOpen() && max--) {
Files[i]->Close();
if (Files[i]->RemoveRef()<=0) {
delete Files[i];
Files[i]=0;
break;
}
if (Files[i]->RemoveRef()<=0) break;
}
found_file=true;
}

View file

@ -85,6 +85,7 @@ Virtual_File::Virtual_File(Bit8u * in_data,Bit32u in_size) {
file_pos=0;
date=DOS_PackDate(2002,10,1);
time=DOS_PackTime(12,34,56);
open=true;
}
bool Virtual_File::Read(Bit8u * data,Bit16u * size) {