From: H. Peter Anvin Date: Mon, 1 Feb 2010 23:41:43 +0000 (-0800) Subject: mkdiskimage: add option -s to make a sparse image X-Git-Tag: syslinux-3.85-pre4^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e96e9cc1c3549c86dbf4e7caf880477e16e93e0;p=platform%2Fupstream%2Fsyslinux.git mkdiskimage: add option -s to make a sparse image It is often fine to have a sparse file for the output image, so add an -s option to generate a sparse image. Signed-off-by: H. Peter Anvin --- diff --git a/utils/mkdiskimage.in b/utils/mkdiskimage.in index 9231fa2..533193a 100644 --- a/utils/mkdiskimage.in +++ b/utils/mkdiskimage.in @@ -2,7 +2,7 @@ ## ----------------------------------------------------------------------- ## ## Copyright 2002-2008 H. Peter Anvin - All Rights Reserved -## Copyright 2009 Intel Corporation; author: H. Peter Anvin +## Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -144,6 +144,7 @@ if ( $file eq '' || $c < 1 || $h < 1 || $h > 256 || $s < 1 || $s > 63 ) { print STDERR " -z use zipdisk geometry (h=64 s=32)\n"; print STDERR " -4 use partition entry 4 (standard for zipdisks)\n"; print STDERR " -i specify the MBR ID\n"; + print STDERR " -s output a sparse file (don't allocate all blocks)\n"; exit 1; } @@ -216,13 +217,16 @@ print OUTPUT "\x55\xaa"; $totalsize = $c*$h*$s; $tracks = $c*$h; -$track = "\0" x (512*$s); +# If -s is given, try to simply use truncate... +unless ($opt{'s'} && truncate(OUTPUT, $totalsize)) { + $track = "\0" x (512*$s); -# Print fractional track -print OUTPUT "\0" x (512 * ($s-1)); + # Print fractional track + print OUTPUT "\0" x (512 * ($s-1)); -for ( $i = 1 ; $i < $tracks ; $i++ ) { - print OUTPUT $track; + for ( $i = 1 ; $i < $tracks ; $i++ ) { + print OUTPUT $track; + } } # Print mtools temp file