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:
parent
f3f33c5ea1
commit
381dd8be87
2 changed files with 6 additions and 8 deletions
|
@ -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;
|
||||
|
|
|
@ -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*/) {
|
||||
|
|
Loading…
Add table
Reference in a new issue