diff --git a/devices/storage/blockstoragedevice.cpp b/devices/storage/blockstoragedevice.cpp
index e797aa1..d517367 100644
--- a/devices/storage/blockstoragedevice.cpp
+++ b/devices/storage/blockstoragedevice.cpp
@@ -25,9 +25,10 @@ along with this program. If not, see .
using namespace std;
-BlockStorageDevice::BlockStorageDevice(const uint32_t cache_blocks, const uint32_t block_size) {
+BlockStorageDevice::BlockStorageDevice(const uint32_t cache_blocks, const uint32_t block_size, const uint64_t max_blocks) {
this->block_size = block_size;
this->cache_size = cache_blocks * this->block_size;
+ this->max_blocks = max_blocks;
// allocate device cache and fill it with zeroes
this->data_cache = std::unique_ptr(new char[this->cache_size] ());
@@ -46,6 +47,9 @@ int BlockStorageDevice::set_host_file(std::string file_path) {
this->size_bytes = this->img_file.size();
this->size_blocks = this->size_bytes / this->block_size;
+ if (this->size_blocks > this->max_blocks)
+ return -1;
+
this->set_fpos(0);
this->is_ready = true;
diff --git a/devices/storage/blockstoragedevice.h b/devices/storage/blockstoragedevice.h
index 3a93270..14b8456 100644
--- a/devices/storage/blockstoragedevice.h
+++ b/devices/storage/blockstoragedevice.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
class BlockStorageDevice {
public:
- BlockStorageDevice(const uint32_t cache_blocks, const uint32_t block_size=512);
+ BlockStorageDevice(const uint32_t cache_blocks, const uint32_t block_size=512, const uint64_t max_blocks=0xffffffffffffffff);
~BlockStorageDevice();
void set_block_size(const int blk_size) { this->block_size = blk_size; };
@@ -49,6 +49,7 @@ protected:
ImgFile img_file;
uint64_t size_bytes = 0; // image file size in bytes
uint64_t size_blocks = 0; // image file size in blocks
+ uint64_t max_blocks = 0; // maximum number of blocks supported
uint64_t cur_fpos = 0; // current image file pointer position
uint32_t block_size = 512; // physical block size
uint32_t cache_size = 0; // cache size
diff --git a/devices/storage/cdromdrive.cpp b/devices/storage/cdromdrive.cpp
index de8efee..441e4ff 100644
--- a/devices/storage/cdromdrive.cpp
+++ b/devices/storage/cdromdrive.cpp
@@ -30,7 +30,7 @@ along with this program. If not, see .
#include
#include
-CdromDrive::CdromDrive() : BlockStorageDevice(31, 2048) {
+CdromDrive::CdromDrive() : BlockStorageDevice(31, 2048, 0xfffffffe) {
this->is_writeable = false;
}
@@ -133,7 +133,7 @@ uint32_t CdromDrive::request_sense(uint8_t *data_ptr, uint8_t sense_key,
}
uint32_t CdromDrive::report_capacity(uint8_t *data_ptr) {
- WRITE_DWORD_BE_A(data_ptr, this->size_blocks);
+ WRITE_DWORD_BE_A(data_ptr, static_cast(this->size_blocks));
WRITE_DWORD_BE_A(&data_ptr[4], this->block_size);
return 8;
}