mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-16 18:30:32 +00:00
Ensured that FileHolder
gets a writeable file reference if one is possible, and records whether the file in hand is read-only. So now the SSD class can answer honestly.
This commit is contained in:
parent
4adcb46665
commit
bfe6c0a0c1
@ -65,7 +65,7 @@ unsigned int SSD::get_head_count()
|
|||||||
|
|
||||||
bool SSD::get_is_read_only()
|
bool SSD::get_is_read_only()
|
||||||
{
|
{
|
||||||
return false;
|
return is_read_only_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Track> SSD::get_uncached_track_at_position(unsigned int head, unsigned int position)
|
std::shared_ptr<Track> SSD::get_uncached_track_at_position(unsigned int head, unsigned int position)
|
||||||
@ -85,9 +85,12 @@ std::shared_ptr<Track> SSD::get_uncached_track_at_position(unsigned int head, un
|
|||||||
new_sector.sector = (uint8_t)sector;
|
new_sector.sector = (uint8_t)sector;
|
||||||
|
|
||||||
new_sector.data.resize(256);
|
new_sector.data.resize(256);
|
||||||
fread(&new_sector.data[0], 1, 256, file_);
|
fread(new_sector.data.data(), 1, 256, file_);
|
||||||
// if(feof(file_))
|
|
||||||
// new_sector.data[0];
|
// zero out if this wasn't present in the disk image; it's still appropriate to put a sector
|
||||||
|
// on disk because one will have been placed during formatting, but there's no reason to leak
|
||||||
|
// information from outside the emulated machine's world
|
||||||
|
if(feof(file_)) memset(new_sector.data.data(), 0, 256);
|
||||||
|
|
||||||
sectors.push_back(std::move(new_sector));
|
sectors.push_back(std::move(new_sector));
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,13 @@ FileHolder::~FileHolder()
|
|||||||
FileHolder::FileHolder(const char *file_name) : file_(nullptr)
|
FileHolder::FileHolder(const char *file_name) : file_(nullptr)
|
||||||
{
|
{
|
||||||
stat(file_name, &file_stats_);
|
stat(file_name, &file_stats_);
|
||||||
file_ = fopen(file_name, "rb");
|
is_read_only_ = false;
|
||||||
|
file_ = fopen(file_name, "rb+");
|
||||||
|
if(!file_)
|
||||||
|
{
|
||||||
|
is_read_only_ = true;
|
||||||
|
file_ = fopen(file_name, "rb");
|
||||||
|
}
|
||||||
if(!file_) throw ErrorCantOpen;
|
if(!file_) throw ErrorCantOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ class FileHolder {
|
|||||||
|
|
||||||
FILE *file_;
|
FILE *file_;
|
||||||
struct stat file_stats_;
|
struct stat file_stats_;
|
||||||
|
bool is_read_only_;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user