block/raw-posix: get right partition size
PATCH 1/1 block/raw-posix: get right partition size
use the correct way to get the size of a disk device or partition
From: Adam Hamsik <[email protected]>
Signed-off-by Christoph Egger <[email protected]>
block/raw-posix.c +32 -0
@@ -64,6 +64,13 @@#include <sys/dkio.h> #endif +#ifdef __NetBSD__ +#include <sys/ioctl.h> +#include <sys/disklabel.h> +#include <sys/dkio.h> +#include <sys/disk.h> +#endif +#ifdef __DragonFly__#include <sys/ioctl.h> #include <sys/diskslice.h>
@@ -622,6 +663,31 @@ static int64_t raw_getlength(BlockDriverState *bs) } elsereturn st.st_size; } +#elif defined(__NetBSD__) +static int64_t raw_getlength (BlockDriverState *bs) +{ +BDRVRawState *s = bs->opaque; +int fd = s->fd; +struct stat st; + +if (fstat (fd, &st)) +return -1 ; +if (S_ISCHR (st.st_mode) ||S_ISBLK (st.st_mode)) { +struct dkwedge_info dkw; + +if (ioctl (fd,DIOCGWEDGEINFO , &dkw) !=-1 ) { +return dkw.dkw_size *512 ; + }else { +struct disklabel dl; + +if (ioctl (fd,DIOCGDINFO , &dl)) +return -1 ; +return (uint64_t )dl.d_secsize * + dl.d_partitions[DISKPART (st.st_rdev)].p_size; + } + }else +return st.st_size; +}#elif defined(__sun__)static int64_t raw_getlength (BlockDriverState *bs) {
Signature · 6 lines
---to satisfy European Law for business letters: Advanced Micro Devices GmbH Einsteinring 24, 85689 Dornach b. Muenchen Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen Registergericht Muenchen, HRB Nr. 43632
Kevin Wolf
AppliedAm 23.05.2011 14:31, schrieb Christoph Egger:
Quoted 5 lines
use the correct way to get the size of a disk device or partition
From: Adam Hamsik <[email protected]>
Signed-off-by Christoph Egger <[email protected]>
Thanks, applied to the block branch.
Kevin