diff options
-rw-r--r-- | Isocheck.pm | 72 | ||||
-rw-r--r-- | image_tests/003_is_hybrid.t | 71 |
2 files changed, 72 insertions, 71 deletions
diff --git a/Isocheck.pm b/Isocheck.pm index fe0b85b..4778af5 100644 --- a/Isocheck.pm +++ b/Isocheck.pm @@ -51,7 +51,7 @@ our $VERSION = '0.2.0'; use base 'Exporter'; -our @EXPORT = qw(parse_image_file_name); +our @EXPORT = qw(parse_image_file_name is_hybrid hybrid1 hybrid2 hybrid3); sub parse_image_file_name { my ($name) = @_; @@ -87,4 +87,74 @@ sub parse_image_file_name { return %info; } +# Verification if the ISO is hybrid +sub is_hybrid { + my ($img, $full) = @_; + + open(my $iso, $img); + my $hybrid = hybrid1($iso); + $hybrid &= hybrid2($iso); + $hybrid &= hybrid3($iso); + if ($full) { + # system "dd if=$img of=/dev/my-pendrive bs=8"; + } + close($iso); + + return $hybrid; +} + + +# Check the first 512 bytes of the iso +sub hybrid1 { + my ($iso) = @_; + my $buffer; + my $hybrid; + + foreach (0 .. 512) { + read($iso, $buffer, 1); + if ($buffer ne '\x00') { + $hybrid = 1; + } + } + + return $hybrid; +} + +#Check the 0x1fe & 0x1ff bytes of the iso +sub hybrid2 { + my ($iso) = @_; + my $hybrid; + my $buffer; + my $byte = "\x55"; + + seek($iso, 0x1fe, 0); + read($iso, $buffer, 1); + if ($buffer eq $byte) { + read($iso, $buffer, 1); + $byte = "\xaa"; + if ($buffer eq $byte) { + $hybrid = 1; + } + } + + return $hybrid; +} + +# check from the 0x200 to the 0x8000 bytes +sub hybrid3 { + my ($iso) = @_; + my $hybrid = 1; + my $buffer; + + seek($iso, 0x200, 0); + foreach (0x200 .. 0x8000) { + read($iso, $buffer, 1); + if ($buffer eq '\x00') { + $hybrid = 0; + } + } + + return $hybrid; +} + 1;
\ No newline at end of file diff --git a/image_tests/003_is_hybrid.t b/image_tests/003_is_hybrid.t index dd89fd7..fc1ebba 100644 --- a/image_tests/003_is_hybrid.t +++ b/image_tests/003_is_hybrid.t @@ -19,6 +19,7 @@ # use Test::Most; +use Isocheck; bail_on_fail; @@ -26,74 +27,4 @@ my ($image_path) = @ARGV; ok(is_hybrid($image_path, 0), "Is hybrid"); -# Verification if the ISO is hybrid -sub is_hybrid { - my ($img, $full) = @_; - - open(my $iso, $img); - my $hybrid = hybrid1($iso); - $hybrid &= hybrid2($iso); - $hybrid &= hybrid3($iso); - if ($full) { - # system "dd if=$img of=/dev/my-pendrive bs=8"; - } - close($iso); - - return $hybrid; -} - - -# Check the first 512 bytes of the iso -sub hybrid1 { - my ($iso) = @_; - my $buffer; - my $hybrid; - - foreach (0 .. 512) { - read($iso, $buffer, 1); - if ($buffer ne '\x00') { - $hybrid = 1; - } - } - - return $hybrid; -} - -#Check the 0x1fe & 0x1ff bytes of the iso -sub hybrid2 { - my ($iso) = @_; - my $hybrid; - my $buffer; - my $byte = "\x55"; - - seek($iso, 0x1fe, 0); - read($iso, $buffer, 1); - if ($buffer eq $byte) { - read($iso, $buffer, 1); - $byte = "\xaa"; - if ($buffer eq $byte) { - $hybrid = 1; - } - } - - return $hybrid; -} - -# check from the 0x200 to the 0x8000 bytes -sub hybrid3 { - my ($iso) = @_; - my $hybrid = 1; - my $buffer; - - seek($iso, 0x200, 0); - foreach (0x200 .. 0x8000) { - read($iso, $buffer, 1); - if ($buffer eq '\x00') { - $hybrid = 0; - } - } - - return $hybrid; -} - done_testing(); |