[syslinux:fsc] mkdiskimage: add option -s to make a sparse image

syslinux-bot for H. Peter Anvin hpa at zytor.com
Mon Feb 1 15:45:08 PST 2010


Commit-ID:  1e96e9cc1c3549c86dbf4e7caf880477e16e93e0
Gitweb:     http://syslinux.zytor.com/commit/1e96e9cc1c3549c86dbf4e7caf880477e16e93e0
Author:     H. Peter Anvin <hpa at zytor.com>
AuthorDate: Mon, 1 Feb 2010 15:41:43 -0800
Committer:  H. Peter Anvin <hpa at zytor.com>
CommitDate: Mon, 1 Feb 2010 15:41:43 -0800

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 <hpa at zytor.com>


---
 utils/mkdiskimage.in |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

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



More information about the Syslinux-commits mailing list