diff options
author | Romain d'Alverny <rda@mageia.org> | 2012-02-17 18:42:18 +0000 |
---|---|---|
committer | Romain d'Alverny <rda@mageia.org> | 2012-02-17 18:42:18 +0000 |
commit | 00b1ab6b40f25ce4f9296590ec17f406612c992f (patch) | |
tree | d4c3185fbb2a1b978e987b442c700c49a13754a3 /Isocheck.pm | |
parent | 9e4bd485b397e7ff07d9023ef49dc977f97b2b12 (diff) | |
download | isocheck-00b1ab6b40f25ce4f9296590ec17f406612c992f.tar isocheck-00b1ab6b40f25ce4f9296590ec17f406612c992f.tar.gz isocheck-00b1ab6b40f25ce4f9296590ec17f406612c992f.tar.bz2 isocheck-00b1ab6b40f25ce4f9296590ec17f406612c992f.tar.xz isocheck-00b1ab6b40f25ce4f9296590ec17f406612c992f.zip |
move functions into module
Diffstat (limited to 'Isocheck.pm')
-rw-r--r-- | Isocheck.pm | 72 |
1 files changed, 71 insertions, 1 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 |