From 00b1ab6b40f25ce4f9296590ec17f406612c992f Mon Sep 17 00:00:00 2001 From: Romain d'Alverny Date: Fri, 17 Feb 2012 18:42:18 +0000 Subject: move functions into module --- Isocheck.pm | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) (limited to 'Isocheck.pm') 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 -- cgit v1.2.1