Conflicts: block.h
Signed-off-by: Devin Nakamura <devin...@gmail.com> --- block.c | 29 +++++++++++++++++++++++++++++ block.h | 2 ++ 2 files changed, 31 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index 9530577..d0019c4 100644 --- a/block.c +++ b/block.c @@ -3082,3 +3082,32 @@ int bdrv_get_conversion_options(BlockDriverState *bs, } return bs->drv->bdrv_get_conversion_options(bs, options); } + +/** + * Gets a mapping from an offset in the image to an offset within a file + * + * All offsets are in bytes. Functions starts its search at offset host_offset + * + count (offset within the image, not the file offset) + * + * @param guest_offset used to calculate starting search location on + * function call. On return it is the starting + * offset of the mapping in the image. + * @param host_offset[out] The starting file offset of the mapping. + * @param contiguous_bytes[out] The number of bytes for which this mapping is + * contiguous. If 0, there are no more mapppings in + * the image + */ + +int bdrv_get_mapping(BlockDriverState *bs, uint64_t *guest_offset, + uint64_t *host_offset, uint64_t *contiguous_bytes) +{ + BlockDriver *drv = bs->drv; + if (!drv) { + return -ENOMEDIUM; + } + if (!drv->bdrv_get_mapping) { + return -ENOTSUP; + } + return drv->bdrv_get_mapping(bs, guest_offset, host_offset, + contiguous_bytes); +} diff --git a/block.h b/block.h index 662bae7..3459900 100644 --- a/block.h +++ b/block.h @@ -259,6 +259,8 @@ int bdrv_open_conversion_target(BlockDriverState **bs, BlockDriverState *file, BlockConversionOptions *drv_options, QEMUOptionParameter *usr_options, const char *target_fmt); +int bdrv_get_mapping(BlockDriverState *bs, uint64_t *guest_offset, + uint64_t *host_offset, uint64_t *contiguous_bytes); typedef enum { BLKDBG_L1_UPDATE, -- 1.7.6.rc1