19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project## -----------------------------------------------------------------------
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   Copyright 2007-2009 H. Peter Anvin - All Rights Reserved
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   Copyright 2009 Intel Corporation; author: H. Peter Anvin
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   This program is free software; you can redistribute it and/or modify
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   it under the terms of the GNU General Public License as published by
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   Boston MA 02111-1307, USA; either version 2 of the License, or
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##   (at your option) any later version; incorporated herein by reference.
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project## -----------------------------------------------------------------------
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project## checksize.pl
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project## Check the size of a binary file and pad it with zeroes to that size
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project##
1967324c990c4fbad238119a4667341d5618b2bea2Dianne Hackborn
207db73ed198bb52b8b2c3915cef1df0578359b842Scott Kennedyuse bytes;
21c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project($file, $maxsize, $padsize) = @ARGV;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif (!defined($maxsize)) {
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    # Defaults based on the filename
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if ($file =~ /^mbr[^0-9a-z]/) {
27f6f9f2d0256930ce0bb4913b2260b8480914edc2Dianne Hackborn	$maxsize = $padsize = 440;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } elsif ($file =~ /^gptmbr[^0-9a-z]/) {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	$maxsize = $padsize = 440;
30d8a43f61680bacf0d4b52a03ff3c7a07307377fcDianne Hackborn    } elsif ($file =~ /^isohdp[fp]x[^0-9a-z]/) {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	$maxsize = $padsize = 432;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } elsif ($file =~ /^altmbr[^0-9a-z]/) {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project	$maxsize = $padsize = 439;
3467324c990c4fbad238119a4667341d5618b2bea2Dianne Hackborn    } else {
3567324c990c4fbad238119a4667341d5618b2bea2Dianne Hackborn	die "$0: no default size for filename: $file\n";
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
38ee3bcc4c6462d1402e48e9d260e16d038d8fe291Dianne Hackborn
39ee3bcc4c6462d1402e48e9d260e16d038d8fe291Dianne Hackborn$padsize = $maxsize unless(defined($padsize));
40ee3bcc4c6462d1402e48e9d260e16d038d8fe291Dianne Hackborn
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectopen(FILE, '+<', $file) or die;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@st = stat(FILE);
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif (!defined($size = $st[7])) {
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    die "$0: $file: $!\n";
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif ($size > $maxsize) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    print STDERR "$file: too big ($size > $maxsize)\n";
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    exit 1;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} elsif ($size < $padsize) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    seek(FILE, $size, 0);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    print FILE "\0" x ($padsize-$size);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
537aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main
547aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Mainexit 0;
55ee3bcc4c6462d1402e48e9d260e16d038d8fe291Dianne Hackborn