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, &sectors);

You need to check the error return from these ioctl calls.

> +
> +        // Query the size of each sector
> +        uint32_t sectorSize = 0;
> +        ioctl(fd, DKIOCGETBLOCKSIZE, &sectorSize);
> +
> +        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

Reply via email to