From 96b8f136f52ea2dc5948fe24f0bf4483251ac280 Mon Sep 17 00:00:00 2001 From: ths Date: Mon, 17 Dec 2007 01:35:20 +0000 Subject: [PATCH] Fix bdrv_get_geometry to return uint64_t, by Andre Przywara. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3825 c046a42c-6fe2-441c-8c8c-71466251a162 --- block.c | 2 +- block.h | 2 +- hw/fdc.c | 2 +- hw/ide.c | 27 ++++++++++++++++----------- hw/scsi-disk.c | 2 +- qemu-img.c | 10 ++++++---- 6 files changed, 26 insertions(+), 19 deletions(-) diff --git a/block.c b/block.c index 3cb3cc22dc..8ec86adda5 100644 --- a/block.c +++ b/block.c @@ -717,7 +717,7 @@ int64_t bdrv_getlength(BlockDriverState *bs) } /* return 0 as number of sectors if no device present or error */ -void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr) +void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr) { int64_t length; length = bdrv_getlength(bs); diff --git a/block.h b/block.h index f98639a89a..69cfbb632b 100644 --- a/block.h +++ b/block.h @@ -72,7 +72,7 @@ int bdrv_pwrite(BlockDriverState *bs, int64_t offset, const void *buf, int count); int bdrv_truncate(BlockDriverState *bs, int64_t offset); int64_t bdrv_getlength(BlockDriverState *bs); -void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr); +void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); int bdrv_commit(BlockDriverState *bs); void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size); /* async block I/O */ diff --git a/hw/fdc.c b/hw/fdc.c index 868ae076a4..e5f46d086e 100644 --- a/hw/fdc.c +++ b/hw/fdc.c @@ -234,7 +234,7 @@ static const fd_format_t fd_formats[] = { static void fd_revalidate (fdrive_t *drv) { const fd_format_t *parse; - int64_t nb_sectors, size; + uint64_t nb_sectors, size; int i, first_match, match; int nb_heads, max_track, last_sect, ro; diff --git a/hw/ide.c b/hw/ide.c index 18431e7a33..bc82bb21d1 100644 --- a/hw/ide.c +++ b/hw/ide.c @@ -1465,12 +1465,12 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_SEEK: { - int lba; - int64_t total_sectors; + unsigned int lba; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1516,11 +1516,11 @@ static void ide_atapi_cmd(IDEState *s) case GPCMD_READ_TOC_PMA_ATIP: { int format, msf, start_track, len; - int64_t total_sectors; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1560,11 +1560,11 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_READ_CDVD_CAPACITY: { - int64_t total_sectors; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1580,7 +1580,7 @@ static void ide_atapi_cmd(IDEState *s) int media = packet[1]; int layer = packet[6]; int format = packet[2]; - int64_t total_sectors; + uint64_t total_sectors; if (media != 0 || layer != 0) { @@ -1592,6 +1592,11 @@ static void ide_atapi_cmd(IDEState *s) case 0: bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; + if (total_sectors == 0) { + ide_atapi_cmd_error(s, SENSE_NOT_READY, + ASC_MEDIUM_NOT_PRESENT); + break; + } memset(buf, 0, 2052); @@ -1636,7 +1641,7 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_GET_CONFIGURATION: { - int64_t total_sectors; + uint64_t total_sectors; /* only feature 0 is supported */ if (packet[2] != 0 || packet[3] != 0) { @@ -1721,7 +1726,7 @@ static void ide_cfata_metadata_write(IDEState *s) static void cdrom_change_cb(void *opaque) { IDEState *s = opaque; - int64_t nb_sectors; + uint64_t nb_sectors; /* XXX: send interrupt too */ bdrv_get_geometry(s->bs, &nb_sectors); @@ -2417,7 +2422,7 @@ static void ide_init2(IDEState *ide_state, IDEState *s; static int drive_serial = 1; int i, cylinders, heads, secs, translation, lba_detected = 0; - int64_t nb_sectors; + uint64_t nb_sectors; for(i = 0; i < 2; i++) { s = ide_state + i; diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index d281b8cbba..220b1997cc 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -284,7 +284,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag, uint8_t *buf, int lun) { SCSIDeviceState *s = d->state; - int64_t nb_sectors; + uint64_t nb_sectors; uint32_t lba; uint32_t len; int cmdlen; diff --git a/qemu-img.c b/qemu-img.c index f1a8aebf5e..2dffe8e3a4 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -235,7 +235,7 @@ static int img_create(int argc, char **argv) const char *fmt = "raw"; const char *filename; const char *base_filename = NULL; - int64_t size; + uint64_t size; const char *p; BlockDriver *drv; @@ -300,7 +300,7 @@ static int img_create(int argc, char **argv) printf(", backing_file=%s", base_filename); } - printf(", size=%" PRId64 " kB\n", (int64_t) (size / 1024)); + printf(", size=%" PRIu64 " kB\n", size / 1024); ret = bdrv_create(drv, filename, size / 512, base_filename, flags); if (ret < 0) { if (ret == -ENOTSUP) { @@ -410,7 +410,8 @@ static int img_convert(int argc, char **argv) const char *fmt, *out_fmt, *out_filename; BlockDriver *drv; BlockDriverState **bs, *out_bs; - int64_t total_sectors, nb_sectors, sector_num, bs_offset, bs_sectors; + int64_t total_sectors, nb_sectors, sector_num, bs_offset; + uint64_t bs_sectors; uint8_t buf[IO_BUF_SIZE]; const uint8_t *buf1; BlockDriverInfo bdi; @@ -655,7 +656,8 @@ static int img_info(int argc, char **argv) BlockDriver *drv; BlockDriverState *bs; char fmt_name[128], size_buf[128], dsize_buf[128]; - int64_t total_sectors, allocated_size; + uint64_t total_sectors; + int64_t allocated_size; char backing_filename[1024]; char backing_filename2[1024]; BlockDriverInfo bdi;