From owner-svn-src-user@FreeBSD.ORG Fri May 9 01:13:16 2014 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id DEC5D8F5; Fri, 9 May 2014 01:13:15 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BFB4BBE5; Fri, 9 May 2014 01:13:15 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s491DFNi088644; Fri, 9 May 2014 01:13:15 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s491DFdE088614; Fri, 9 May 2014 01:13:15 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201405090113.s491DFdE088614@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 9 May 2014 01:13:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r265725 - user/marcel/mkimg X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 May 2014 01:13:16 -0000 Author: marcel Date: Fri May 9 01:13:14 2014 New Revision: 265725 URL: http://svnweb.freebsd.org/changeset/base/265725 Log: Add image_get_size() so formats can query about the image size. Create the VMDK (embedded) descriptor file and round its size to a multiple of 512. TODO: We need the name of the output file -- it's in the extent description. For now, just use "mkimg.vmdk". Modified: user/marcel/mkimg/image.c user/marcel/mkimg/image.h user/marcel/mkimg/vmdk.c Modified: user/marcel/mkimg/image.c ============================================================================== --- user/marcel/mkimg/image.c Fri May 9 00:34:29 2014 (r265724) +++ user/marcel/mkimg/image.c Fri May 9 01:13:14 2014 (r265725) @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); static char image_tmpfile[] = "/tmp/mkimg-XXXXXX"; static int image_fd = -1; +static lba_t image_size; static void cleanup(void) @@ -123,10 +124,18 @@ image_copyout(int fd) return (error); } +lba_t +image_get_size(void) +{ + + return (image_size); +} + int image_set_size(lba_t blk) { + image_size = blk; if (ftruncate(image_fd, blk * secsz) == -1) return (errno); return (0); Modified: user/marcel/mkimg/image.h ============================================================================== --- user/marcel/mkimg/image.h Fri May 9 00:34:29 2014 (r265724) +++ user/marcel/mkimg/image.h Fri May 9 01:13:14 2014 (r265725) @@ -33,6 +33,7 @@ typedef int64_t lba_t; int image_copyin(lba_t blk, int fd, uint64_t *sizep); int image_copyout(int fd); +lba_t image_get_size(void); int image_init(void); int image_set_size(lba_t blk); int image_write(lba_t blk, void *buf, ssize_t len); Modified: user/marcel/mkimg/vmdk.c ============================================================================== --- user/marcel/mkimg/vmdk.c Fri May 9 00:34:29 2014 (r265724) +++ user/marcel/mkimg/vmdk.c Fri May 9 01:13:14 2014 (r265725) @@ -31,6 +31,8 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include #include @@ -67,9 +69,34 @@ struct vmdk_header { char padding[433]; } __attribute__((__packed__)); +static const char desc_fmt[] = + "# Disk DescriptorFile\n" + "version=%d\n" + "CID=%08x\n" + "parentCID=ffffffff\n" + "createType=\"monolithicSparse\"\n" + "# Extent description\n" + "RW %ju SPARSE \"%s\"\n" + "# The Disk Data Base\n" + "#DDB\n" + "ddb.adapterType = \"ide\"\n" + "ddb.geometry.cylinders = \"%u\"\n" + "ddb.geometry.heads = \"%u\"\n" + "ddb.geometry.sectors = \"%u\"\n"; + static int vmdk_write(int fd __unused) { + char *desc; + lba_t imgsz; + int desc_len; + + imgsz = image_get_size(); + desc_len = asprintf(&desc, desc_fmt, 1 /*version*/, 0 /*CID*/, + (uintmax_t)imgsz /*size*/, "mkimg.vmdk" /*name*/, + ncyls /*cylinders*/, nheads /*heads*/, nsecs /*sectors*/); + desc_len = (desc_len + 512 - 1) & ~(512 - 1); + desc = realloc(desc, desc_len); /* * Steps: