diff --git a/include/dos_system.h b/include/dos_system.h index 9026d07b..4f5fd72c 100644 --- a/include/dos_system.h +++ b/include/dos_system.h @@ -78,6 +78,7 @@ public: virtual void AddRef() { refCtr++; }; virtual Bits RemoveRef() { return --refCtr; }; virtual bool UpdateDateTimeFromHost() { return true; } + virtual void SetFlagReadOnlyMedium() {} void SetDrive(Bit8u drv) { hdrive=drv;} Bit8u GetDrive(void) { return hdrive;} Bit32u flags; @@ -130,8 +131,8 @@ public: bool Close (void); Bit16u GetInformation (void); bool UpdateDateTimeFromHost (void); - void FlagReadOnlyMedium (void); void Flush (void); + void SetFlagReadOnlyMedium () { read_only_medium = true; } FILE * fhandle; //todo handle this properly private: bool read_only_medium; diff --git a/src/dos/drive_local.cpp b/src/dos/drive_local.cpp index e3810327..1fac1aaa 100644 --- a/src/dos/drive_local.cpp +++ b/src/dos/drive_local.cpp @@ -520,10 +520,6 @@ localFile::localFile(const char* _name, FILE * handle) { SetName(_name); } -void localFile::FlagReadOnlyMedium(void) { - read_only_medium = true; -} - bool localFile::UpdateDateTimeFromHost(void) { if(!open) return false; struct stat temp_stat; @@ -572,9 +568,10 @@ bool cdromDrive::FileOpen(DOS_File * * file,char * name,Bit32u flags) { DOS_SetError(DOSERR_ACCESS_DENIED); return false; } - bool retcode = localDrive::FileOpen(file,name,flags); - if(retcode) (dynamic_cast(*file))->FlagReadOnlyMedium(); - return retcode; + bool success = localDrive::FileOpen(file, name, flags); + if (success) + (*file)->SetFlagReadOnlyMedium(); + return success; } bool cdromDrive::FileCreate(DOS_File * * /*file*/,char * /*name*/,Bit16u /*attributes*/) {