From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:51890) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOUwb-0004lC-AW for qemu-devel@nongnu.org; Mon, 23 May 2011 09:13:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOUwZ-0000cT-3B for qemu-devel@nongnu.org; Mon, 23 May 2011 09:13:13 -0400 Received: from am1ehsobe005.messaging.microsoft.com ([213.199.154.208]:44102 helo=AM1EHSOBE005.bigfish.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOUwY-0000c5-SU for qemu-devel@nongnu.org; Mon, 23 May 2011 09:13:11 -0400 Received: from mail35-am1 (localhost.localdomain [127.0.0.1]) by mail35-am1-R.bigfish.com (Postfix) with ESMTP id 5737AA786E9 for ; Mon, 23 May 2011 12:43:02 +0000 (UTC) Received: from AM1EHSMHS012.bigfish.com (unknown [10.3.201.250]) by mail35-am1.bigfish.com (Postfix) with ESMTP id 0BEC41A6004B for ; Mon, 23 May 2011 12:43:02 +0000 (UTC) Received: from sausexedgep01.amd.com (sausexedgep01-ext.amd.com [163.181.249.72]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by ausb3twp02.amd.com (Axway MailGate 3.8.1) with ESMTP id 2FD03C83D6 for ; Mon, 23 May 2011 07:42:57 -0500 (CDT) Message-ID: <4DDA5395.6070007@amd.com> Date: Mon, 23 May 2011 14:31:17 +0200 From: Christoph Egger MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-15"; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] block/raw-posix: get right partition size List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" use the correct way to get the size of a disk device or partition From: Adam Hamsik Signed-off-by: Christoph Egger diff --git a/block/raw-posix.c b/block/raw-posix.c index 6b72470..d05f373 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -64,6 +64,13 @@ #include #endif +#ifdef __NetBSD__ +#include +#include +#include +#include +#endif + #ifdef __DragonFly__ #include #include @@ -622,6 +663,31 @@ static int64_t raw_getlength(BlockDriverState *bs) } else return 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) { -- ---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