Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: File-MMagic (Re: ichitaro)
- From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
- Date: Mon, 28 Feb 2000 19:15:17 JST
- X-ml-name: namazu-devel-ja
- X-mail-count: 00077
<20000228182733P.satoru-t@xxxxxxxxxxxxxxxxxx>の記事において
satoru-t@xxxxxxxxxxxxxxxxxxさんは書きました。
>> > checktype_filehandle() なら正しく判別されると思います。
>>
>> 駄目みたいです。
うーん、おかしいですね... あ、良くみたら自分の script は
checktype_contents() を使ってました。しかし、その挙動は妙です。
こちらで使っている script を末尾につけておきますので、一度そちらでも
試してみてもらえませんでしょうか。
それから、念のため
# perl -MFile::MMagic -e '$m = new File::MMagic; print "$File::MMagic::VERSION\n"; $m->check_magic();'
を実行した結果も見せてもらえませんでしょうか。
--
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx (private)
nokubi@xxxxxxxxx (official)
#! /usr/local/perl5/bin/perl -w
use strict;
#use FileHandle;
use File::MMagic;
use Compress::Zlib;
for my $filename (@ARGV) {
my $mm = new File::MMagic;
$mm->addSpecials("text/plain; x-type=rfc",
"^Network Working Group",
"^Request for Comments:",
"^Obsoletes:",
"^Category:",
"^Updates:");
$mm->addSpecials("application/x-tex",
'^\\\\document(style|class)');
$mm->addFileExts('\\.tex$', 'application/x-tex');
my $fh = new FileHandle "< $filename";
my $cont = join('', <$fh>);
my $type = $mm->checktype_contents($cont);
if ($type =~ /^application\/x-gzip/) {
{
my $offset = 0;
$offset += 3;
my $flags = unpack('C', substr($cont, $offset, 1));
$offset += 1;
$offset += 6;
$cont = substr($cont, $offset);
$cont = substr($cont, 2) if ($flags & 0x04);
$cont =~ s/^[^\0]*\0// if ($flags & 0x08);
$cont =~ s/^[^\0]*\0// if ($flags & 0x10);
$cont = substr($cont, 2) if ($flags & 0x02);
}
my $x = inflateInit(-WindowBits => - MAX_WBITS()) ;
my ($inf, $stat) = $x->inflate($cont);
$cont = $inf if $stat == Z_OK or $stat == Z_STREAM_END ;
$type = $mm->checktype_contents($cont);
print "Compressed:"
}
print "$type\n";
}