[syslinux] [PATCH] Refactor checksize.pl

Celelibi celelibi at gmail.com
Thu Nov 19 22:40:42 PST 2015


2015-11-19 19:25 UTC+01:00, nico cornu <nicolac76 at yahoo.fr>:
> Le Jeudi 19 novembre 2015 18h43, Celelibi <celelibi at gmail.com> a écrit :
>
>
> 2015-11-19 17:30 UTC+01:00, Nicolas Cornu via Syslinux
> <syslinux at zytor.com>:
>> - Remove padsize argument as it is never used.
>> - Add an usage printed when $file is not set or --help, -h
>>   is the first argument.
>> - Add basic tests for this script.
>> ---
>>  mbr/checksize.pl      | 27 ++++++++++++++++++---------
>>  mbr/checksize_test.sh | 22 ++++++++++++++++++++++
>>  2 files changed, 40 insertions(+), 9 deletions(-)
>>  create mode 100644 mbr/checksize_test.sh
>>
>> diff --git a/mbr/checksize.pl b/mbr/checksize.pl
>> index 4b42327..cbca5b2 100755
>> --- a/mbr/checksize.pl
>> +++ b/mbr/checksize.pl
>> @@ -19,25 +19,34 @@
>>
>>  use bytes;
>>
>> -($file, $maxsize, $padsize) = @ARGV;
>> +($file, $maxsize) = @ARGV;
>> +
>> +if (!defined($file) or $file == "--help" or $file == "-h") {
>> +    $usage = <<"END_USAGE";
>> +Usage: $0 file [maxsize]
>> +If maxsize is not given it will be guessed based on filename:
>> +  - 440 bytes for mbr and gptmbr;
>> +  - 432 bytes for isohdp;
>> +  - 439 bytes for altmbr.
>> +END_USAGE
>> +    die $usage;
>> +}
>>
>>  if (!defined($maxsize)) {
>>      # Defaults based on the filename
>>      if ($file =~ /^mbr[^0-9a-z]/) {
>> -    $maxsize = $padsize = 440;
>> +    $maxsize = 440;
>>      } elsif ($file =~ /^gptmbr[^0-9a-z]/) {
>> -    $maxsize = $padsize = 440;
>> +    $maxsize = 440;
>>      } elsif ($file =~ /^isohdp[fp]x[^0-9a-z]/) {
>> -    $maxsize = $padsize = 432;
>> +    $maxsize = 432;
>>      } elsif ($file =~ /^altmbr[^0-9a-z]/) {
>> -    $maxsize = $padsize = 439;
>> +    $maxsize = 439;
>>      } else {
>>      die "$0: no default size for filename: $file\n";
>>      }
>>  }
>>
>> -$padsize = $maxsize unless(defined($padsize));
>> -
>>  open(FILE, '+<', $file) or die;
>>  @st = stat(FILE);
>>  if (!defined($size = $st[7])) {
>> @@ -46,9 +55,9 @@ if (!defined($size = $st[7])) {
>>  if ($size > $maxsize) {
>>      print STDERR "$file: too big ($size > $maxsize)\n";
>>      exit 1;
>> -} elsif ($size < $padsize) {
>> +} elsif ($size < $maxsize) {
>>      seek(FILE, $size, 0);
>> -    print FILE "\0" x ($padsize-$size);
>> +    print FILE "\0" x ($maxsize-$size);
>>  }
>>
>>  exit 0;
>> diff --git a/mbr/checksize_test.sh b/mbr/checksize_test.sh
>> new file mode 100644
>> index 0000000..d315118
>> --- /dev/null
>> +++ b/mbr/checksize_test.sh
>> @@ -0,0 +1,22 @@
>> +#!/bin/sh
>> +
>> +mkdir -p output_test && cd output_test || exit 1
>> +rm -f a mbr.bin
>> +touch a
>> +# Upgrade size of a file should success
>> +perl ../checksize.pl a 330
>> +[ $(wc -c a | cut -f1 -d" ") -eq 330 ] || exit 2
>> +# Downgrade size of a file should fail
>> +perl ../checksize.pl a 300
>> +[ $? -eq 1 ] || exit 3
>> +rm a
>> +
>> +touch mbr.bin
>> +# Upgrade size of a file
>> +perl ../checksize.pl mbr.bin 330
>> +[ $(wc -c mbr.bin | cut -f1 -d" ") -eq 330 ] || exit 4
>> +# Let's upgrade it by itself
>> +perl ../checksize.pl mbr.bin
>> +[ $(wc -c mbr.bin | cut -f1 -d" ") -eq 440 ] || exit 5
>> +rm mbr.bin
>> +
>> --
>> 2.6.2
>
>> Just to make sure: the goal of the shell script is to check the perl
>> script?
>> If so, I wonder if it wouldn't be better in the test directory if it
>
>> is needed at all. I'll let the others comment on that.
>
> It was only that I modify this script, so I decide to make a test to be
> sure
> of not breaking something.
>
>> I agree with your simplification of checksize.pl, but have you
>> searched through the history to see if there wasn't a good reason to
>> separate maxsize and padsize?
>
>
> Looking in history, first of all, this script only check size.
> hpa make it padding to $padsize. And add in a following commit the defaults
> maxsize and padsize. maxsize and padsize could be different for altmbr.
> In an other following commit, both maxsize and padsize are merged for
> altmbr.

Yeah, I see, the 3 arguments form has only been used for less than one
week between these two commits:
commit 848c8f9a4133e4e0113120a2b311d2352af26228
Date:   Mon Mar 30 18:17:05 2009 -0700

commit f7b5a2254ab7c8aa87679c1b731d2ea285c22e80
Date:   Sat Apr 4 15:32:24 2009 -0700

And only for altmbr.

So, given this feature hasn't been used in more than 6.5 years with no
valid use foreseen from now, I think your refactoring is legit.

> Celelibi
You may want to sign with your own (nick)name. :D


Celelibi



More information about the Syslinux mailing list