On 28 December 2014 at 00:36, Programmingkid <programmingk...@gmail.com> wrote: > 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>
Thanks. (My Mac doesn't have a cdrom...) > --- > 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 I note in passing that this whole function is a total mess -- look at that "if (size == 0)" in the previous #ifdef... However since I think it's impossible to both have the previous #ifdef and this one enabled it won't cause an issue. > + uint64_t sectors = 0; > + ioctl(fd, DKIOCGETBLOCKCOUNT, §ors); You need to check the error return from these ioctl calls. > + > + // 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) { Minor style issues you might want to fix for v2: * use /* */ comments, not // * declare variables only at the top of {} code blocks * don't leave commented out debug printfs in code thanks -- PMM