namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: File::MMagic
- From: knok@xxxxxxxxxxxxx (NOKUBI Takatsugu)
- Date: Mon, 6 Sep 99 17:32:12 JST
<199909050415.NAA22486@xxxxxxxxxxxxxx>の記事において
masao@xxxxxxxxxxさんは書きました。
>> File::MMagic::check_binary() の判定基準で、
>> TAB(0x09)もバイナリとしてしまっているバグがありました。
>> ## 一応、TAB ってテキストですよね !?
はい、テキストとみなすのが正しいと思います。
>> 一応、これを直したものを commit しました。
File::MMagic自体はローカルにCVS管理していて、更新する度にその都度ロー
カルの最新版をNamazuのCVS repositoryに置くようにしています。というわけ
で、一旦こちらでローカルなCVS repositoryに修正をmergeしてから、それを
再度NamazuのCVS treeに戻すという形にしました。
# ついでに他から報告されている別のバグ修正も含め、version 0.17としてお
# きました。
事後報告で申し訳ないですが、今後もこういう形にさせてもらえませんでしょ
うか?
>> ところで、File::MMagicでVRML(model/vrml)[1] の判定もしませんか?
>> 確か、一行目がヘッダで、必ず以下の行を含むので判定できるはず…。
>> #VRML V1.0 ascii (VRML1.0 [2] の場合)
>> #VRML V2.0 utf8 (VRML97 [3] の場合)
こちらも追加しました。いかんせん手元にVRMLなファイルがないので、どな
たか試して頂けませんでしょうか。
# File::MMagicを用いたfileコマンドもどきをメールの末尾に添付しておきま
# す(要 Compress::Zlib)。
--
野首 貴嗣
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;
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";
}