Commit 728dacbd authored by Programmingkid's avatar Programmingkid Committed by Kevin Wolf
Browse files

block/raw-posix.c: Fix raw_getlength() on Mac OS X block devices



This patch replaces the dummy code in raw_getlength() for block devices
on OS X, which always returned LLONG_MAX, with a real implementation
that returns the actual block device size.

Signed-off-by: default avatarJohn Arbuckle <programmingkidx@gmail.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Tested-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 8333c0df
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -1375,7 +1375,20 @@ again:
        if (size == 0)
#endif
#if defined(__APPLE__) && defined(__MACH__)
        size = LLONG_MAX;
        {
            uint64_t sectors = 0;
            uint32_t sector_size = 0;

            if (ioctl(fd, DKIOCGETBLOCKCOUNT, &sectors) == 0
               && ioctl(fd, DKIOCGETBLOCKSIZE, &sector_size) == 0) {
                size = sectors * sector_size;
            } else {
                size = lseek(fd, 0LL, SEEK_END);
                if (size < 0) {
                    return -errno;
                }
            }
        }
#else
        size = lseek(fd, 0LL, SEEK_END);
        if (size < 0) {