This patch fixes the problem with raw_getlength() on Mac OS X so that it actually calculates the correct size of a volume. It has been updated to fix certain coding style issues. Booting and using a real CD in QEMU works again.
signed-off-by: John Arbuckle <programmingk...@gmail.com> --- block/raw-posix.c | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-) diff --git a/block/raw-posix.c b/block/raw-posix.c index e51293a..a090c9c 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1312,7 +1312,24 @@ again: if (size == 0) #endif #if defined(__APPLE__) && defined(__MACH__) - size = LLONG_MAX; + { + uint64_t sectors = 0; + uint32_t sectorSize = 0; + int ret; + + /* Query the number of sectors on the disk */ + ret = ioctl(fd, DKIOCGETBLOCKCOUNT, §ors); + if (ret == -1) { + return -errno; + } + + /* Query the size of each sector */ + ret = ioctl(fd, DKIOCGETBLOCKSIZE, §orSize); + if (ret == -1) { + return -errno; + } + size = sectors * sectorSize; + } #else size = lseek(fd, 0LL, SEEK_END); if (size < 0) { -- 1.7.5.4