The raw_getlength() function under Mac OS X incorrectly returned a constant value instead of calculating the size of a real CD-ROM disc. This patch fixes this problem and makes booting from a real CD-ROM disc possible again under Mac OS X.
signed-off-by: John Arbuckle <programmingk...@gmail.com> --- block/raw-posix.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/block/raw-posix.c b/block/raw-posix.c index e51293a..d723133 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -1312,7 +1312,16 @@ again: if (size == 0) #endif #if defined(__APPLE__) && defined(__MACH__) - size = LLONG_MAX; + // Query the number of sectors on the disk + uint64_t sectors = 0; + ioctl(fd, DKIOCGETBLOCKCOUNT, §ors); + + // Query the size of each sector + uint32_t sectorSize = 0; + ioctl(fd, DKIOCGETBLOCKSIZE, §orSize); + + size = sectors * sectorSize; + //printf("size of disc = %d MB\n", size/(1024*1024)); #else size = lseek(fd, 0LL, SEEK_END); if (size < 0) { -- 1.7.5.4