mirror of https://github.com/xqemu/xqemu.git
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: John Arbuckle <programmingkidx@gmail.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Tested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8333c0dff1
commit
728dacbda8
|
@ -1375,7 +1375,20 @@ again:
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
#endif
|
#endif
|
||||||
#if defined(__APPLE__) && defined(__MACH__)
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
size = LLONG_MAX;
|
{
|
||||||
|
uint64_t sectors = 0;
|
||||||
|
uint32_t sector_size = 0;
|
||||||
|
|
||||||
|
if (ioctl(fd, DKIOCGETBLOCKCOUNT, §ors) == 0
|
||||||
|
&& ioctl(fd, DKIOCGETBLOCKSIZE, §or_size) == 0) {
|
||||||
|
size = sectors * sector_size;
|
||||||
|
} else {
|
||||||
|
size = lseek(fd, 0LL, SEEK_END);
|
||||||
|
if (size < 0) {
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
size = lseek(fd, 0LL, SEEK_END);
|
size = lseek(fd, 0LL, SEEK_END);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
|
|
Loading…
Reference in New Issue