diff --git a/include/dos_inc.h b/include/dos_inc.h index 152afd0a..4f46a970 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_inc.h,v 1.72 2007-11-18 10:30:11 c2woody Exp $ */ +/* $Id: dos_inc.h,v 1.73 2008-01-21 21:26:49 qbix79 Exp $ */ #ifndef DOSBOX_DOS_INC_H #define DOSBOX_DOS_INC_H @@ -502,6 +502,7 @@ public: bool Extended(void); void GetAttr(Bit8u & attr); void SetAttr(Bit8u attr); + bool Valid(void); private: bool extended; PhysPt real_pt; diff --git a/src/dos/dos_classes.cpp b/src/dos/dos_classes.cpp index fa648bc2..81364b6e 100644 --- a/src/dos/dos_classes.cpp +++ b/src/dos/dos_classes.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_classes.cpp,v 1.53 2007-11-07 22:08:03 c2woody Exp $ */ +/* $Id: dos_classes.cpp,v 1.54 2008-01-21 21:26:49 qbix79 Exp $ */ #include #include @@ -472,6 +472,12 @@ void DOS_FCB::FileOpen(Bit8u _fhandle) { sSave(sFCB,date,Files[temp]->date); } +bool DOS_FCB::Valid() { + //Very simple check for Oubliette + if(sGet(sFCB,filename[0]) == 0 && sGet(sFCB,file_handle) == 0) return false; + return true; +} + void DOS_FCB::FileClose(Bit8u & _fhandle) { _fhandle=sGet(sFCB,file_handle); sSave(sFCB,file_handle,0xff); diff --git a/src/dos/dos_files.cpp b/src/dos/dos_files.cpp index 0c37e33e..6c921731 100644 --- a/src/dos/dos_files.cpp +++ b/src/dos/dos_files.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_files.cpp,v 1.93 2007-10-20 19:13:59 c2woody Exp $ */ +/* $Id: dos_files.cpp,v 1.94 2008-01-21 21:26:49 qbix79 Exp $ */ #include #include @@ -851,6 +851,7 @@ bool DOS_FCBOpen(Bit16u seg,Bit16u offset) { bool DOS_FCBClose(Bit16u seg,Bit16u offset) { DOS_FCB fcb(seg,offset); + if(!fcb.Valid()) return false; Bit8u fhandle; fcb.FileClose(fhandle); DOS_CloseFile(fhandle);