mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
[Imgtool] Fixed a recently introduced bug which caused image types that do not support partitions to function incorrectly
This commit is contained in:
parent
a9d260cf14
commit
696b24e24f
@ -518,7 +518,7 @@ imgtoolerr_t imgtool::image::list_partitions(std::vector<imgtool::partition_info
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// default implementation
|
// default implementation
|
||||||
partitions.emplace_back(unknown_partition_get_info, 0, ~0);
|
partitions.emplace_back(module().imgclass, 0, ~0);
|
||||||
}
|
}
|
||||||
return IMGTOOLERR_SUCCESS;
|
return IMGTOOLERR_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -560,9 +560,8 @@ uint64_t imgtool::image::rand()
|
|||||||
// imgtool::partition ctor
|
// imgtool::partition ctor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
imgtool::partition::partition(imgtool::image &image, imgtool_class &imgclass, int partition_index, uint64_t base_block, uint64_t block_count)
|
imgtool::partition::partition(imgtool::image &image, const imgtool_class &imgclass, int partition_index, uint64_t base_block, uint64_t block_count)
|
||||||
: m_image(image)
|
: m_image(image)
|
||||||
//, m_partition_index(partition_index)
|
|
||||||
, m_base_block(base_block)
|
, m_base_block(base_block)
|
||||||
, m_block_count(block_count)
|
, m_block_count(block_count)
|
||||||
, m_imgclass(imgclass)
|
, m_imgclass(imgclass)
|
||||||
@ -635,9 +634,7 @@ imgtoolerr_t imgtool::partition::open(imgtool::image &image, int partition_index
|
|||||||
{
|
{
|
||||||
imgtoolerr_t err = (imgtoolerr_t)IMGTOOLERR_SUCCESS;
|
imgtoolerr_t err = (imgtoolerr_t)IMGTOOLERR_SUCCESS;
|
||||||
imgtool::partition::ptr p;
|
imgtool::partition::ptr p;
|
||||||
imgtool_class imgclass;
|
|
||||||
std::vector<imgtool::partition_info> partitions;
|
std::vector<imgtool::partition_info> partitions;
|
||||||
uint64_t base_block, block_count;
|
|
||||||
imgtoolerr_t (*open_partition)(imgtool::partition &partition, uint64_t first_block, uint64_t block_count);
|
imgtoolerr_t (*open_partition)(imgtool::partition &partition, uint64_t first_block, uint64_t block_count);
|
||||||
|
|
||||||
// list the partitions
|
// list the partitions
|
||||||
@ -646,14 +643,13 @@ imgtoolerr_t imgtool::partition::open(imgtool::image &image, int partition_index
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
// is this an invalid index?
|
// is this an invalid index?
|
||||||
if ((partition_index < 0) || (partition_index >= partitions.size()) || !partitions[partition_index].get_info())
|
if ((partition_index < 0) || (partition_index >= partitions.size()) || (!partitions[partition_index].imgclass().get_info && !partitions[partition_index].imgclass().derived_get_info))
|
||||||
return IMGTOOLERR_INVALIDPARTITION;
|
return IMGTOOLERR_INVALIDPARTITION;
|
||||||
|
|
||||||
// use this partition
|
// use this partition
|
||||||
memset(&imgclass, 0, sizeof(imgclass));
|
const imgtool_class &imgclass(partitions[partition_index].imgclass());
|
||||||
imgclass.get_info = partitions[partition_index].get_info();
|
uint64_t base_block = partitions[partition_index].base_block();
|
||||||
base_block = partitions[partition_index].base_block();
|
uint64_t block_count = partitions[partition_index].block_count();
|
||||||
block_count = partitions[partition_index].block_count();
|
|
||||||
|
|
||||||
// allocate the new partition object
|
// allocate the new partition object
|
||||||
try { p = std::make_unique<imgtool::partition>(image, imgclass, partition_index, base_block, block_count); }
|
try { p = std::make_unique<imgtool::partition>(image, imgclass, partition_index, base_block, block_count); }
|
||||||
|
@ -144,7 +144,7 @@ namespace imgtool
|
|||||||
typedef std::unique_ptr<partition> ptr;
|
typedef std::unique_ptr<partition> ptr;
|
||||||
|
|
||||||
// ctor/dtor
|
// ctor/dtor
|
||||||
partition(imgtool::image &image, imgtool_class &imgclass, int partition_index, uint64_t base_block, uint64_t block_count);
|
partition(imgtool::image &image, const imgtool_class &imgclass, int partition_index, uint64_t base_block, uint64_t block_count);
|
||||||
~partition();
|
~partition();
|
||||||
|
|
||||||
static imgtoolerr_t open(imgtool::image &image, int partition_index, ptr &partition);
|
static imgtoolerr_t open(imgtool::image &image, int partition_index, ptr &partition);
|
||||||
|
@ -244,18 +244,26 @@ namespace imgtool
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
partition_info(imgtool_get_info get_info, uint64_t base_block, uint64_t block_count)
|
partition_info(imgtool_get_info get_info, uint64_t base_block, uint64_t block_count)
|
||||||
: m_get_info(get_info)
|
: m_base_block(base_block)
|
||||||
|
, m_block_count(block_count)
|
||||||
|
{
|
||||||
|
memset(&m_imgclass, 0, sizeof(m_imgclass));
|
||||||
|
m_imgclass.get_info = get_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
partition_info(imgtool_class imgclass, uint64_t base_block, uint64_t block_count)
|
||||||
|
: m_imgclass(imgclass)
|
||||||
, m_base_block(base_block)
|
, m_base_block(base_block)
|
||||||
, m_block_count(block_count)
|
, m_block_count(block_count)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
imgtool_get_info get_info() const { return m_get_info; }
|
const imgtool_class &imgclass() const { return m_imgclass; }
|
||||||
uint64_t base_block() const { return m_base_block; }
|
uint64_t base_block() const { return m_base_block; }
|
||||||
uint64_t block_count() const { return m_block_count; }
|
uint64_t block_count() const { return m_block_count; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
imgtool_get_info m_get_info;
|
imgtool_class m_imgclass;
|
||||||
uint64_t m_base_block;
|
uint64_t m_base_block;
|
||||||
uint64_t m_block_count;
|
uint64_t m_block_count;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user