home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / read_magic.al < prev    next >
Text File  |  2005-01-27  |  1KB  |  44 lines

  1. # NOTE: Derived from ../../lib/Storable.pm.
  2. # Changes made here will be lost when autosplit is run again.
  3. # See AutoSplit.pm.
  4. package Storable;
  5.  
  6. #line 113 "../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/read_magic.al)"
  7. sub read_magic {
  8.   my $header = shift;
  9.   return unless defined $header and length $header > 11;
  10.   my $result;
  11.   if ($header =~ s/^perl-store//) {
  12.     die "Can't deal with version 0 headers";
  13.   } elsif ($header =~ s/^pst0//) {
  14.     $result->{file} = 1;
  15.   }
  16.   # Assume it's a string.
  17.   my ($major, $minor, $bytelen) = unpack "C3", $header;
  18.  
  19.   my $net_order = $major & 1;
  20.   $major >>= 1;
  21.   @$result{qw(major minor netorder)} = ($major, $minor, $net_order);
  22.  
  23.   return $result if $net_order;
  24.  
  25.   # I assume that it is rare to find v1 files, so this is an intentionally
  26.   # inefficient way of doing it, to make the rest of the code constant.
  27.   if ($major < 2) {
  28.     delete $result->{minor};
  29.     $header = '.' . $header;
  30.     $bytelen = $minor;
  31.   }
  32.  
  33.   @$result{qw(byteorder intsize longsize ptrsize)} =
  34.     unpack "x3 A$bytelen C3", $header;
  35.  
  36.   if ($major >= 2 and $minor >= 2) {
  37.     $result->{nvsize} = unpack "x6 x$bytelen C", $header;
  38.   }
  39.   $result;
  40. }
  41.  
  42. # end of Storable::read_magic
  43. 1;
  44.