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