1
0
Fork 0

Make setter for RO-medium flag a virtual method

This way we prevent pointless dynamic_cast; correct usage of
dynamic_cast requires a nullcheck, which was missing in this case
causing Coverity to complain.

Instead of changing cast, let's make this method a virtual one in base
class - this way we could reuse it in future for cases outside of CD-ROM
(e.g. write-protected floppies).
This commit is contained in:
Patryk Obara 2020-01-05 21:54:23 +01:00 committed by Patryk Obara
parent f3f33c5ea1
commit 381dd8be87
2 changed files with 6 additions and 8 deletions

View file

@ -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;

View file

@ -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<localFile*>(*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*/) {