Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: File::Magicでの挙動



寺西です。

Yukio USUDA wrote:
> 
> Macバイナリは
> ・ヘッダ+データフォーク+リソースフォークでできている

記憶が確かじゃないですが、確かコメントとかも含まれていたような
気がします。

> ・プログラムでなければリソースフォークはついていない

うーむ。そんなことはなかったような気がします。結構付けれたと
思いますよ。たぶん。

ただし、

> ・ヘッダ部は128byte
> ということのようなので、
> 
> ヘッダ部128byteを切り取って
> 他のフィルタに渡してしまうフィルタを作ればよいだけのように思えます。

のように 先頭のヘッダ部分(128byte) カットすれば、実用上問題ない
かもしれません。が、データフォークの長さ、リソースフォークの長さが
ヘッダに書かれていますので、データフォークだけ切り出すように書くのも
そう難しくないと思います。

あと、gzip.pl の呼び出しと、その後のフィルタの呼び出しの仕組みを
理解していないのですが、gzip.pl で処理した結果を見て、次のフィルタ
が起動するようになっているのでしょうか?
(そうじゃないと、どの形式のデータが gzip 圧縮されているのかはわかり
ませんよね。そうかそうか。)
gzip と同じように処理するのも、ただmacバイナリ用のフィルタを追加
すれば実現できるわけですよね? なんて楽。

つい、ヘッダやリソースに有効な情報が含まれているものですから、
これをなんとか利用できないものかと考えてしまいましたが、
ばっさり捨ててしまって、データリソースを次のフィルタに渡すという
シンプルなもので十分ですね。必要最小限の情報はデータリソースに
含まれているわけですから。

> 問題はMacバイナリの識別ですね。
> Macバイナリからヘッダを除去するだけのフィルタモジュールを作るとすれば
> File-MMagicを修正しなくても
> MacBinaryIIIの場合は識別できる文字列が入っているようなので
> $magic->addMagicEntry('102      string  mBIN    application/macbinary');
> とフィルタ内に書くだけでよさそう(mimetypeの定義は議論がありそう)

$magic->addMagicEntry() は複数指定ってできないんでしたっけ?

> ですが、MacBinaryI,IIを他のファイルと見分けるのは難しそうです。

MacBinaryI, II が現存するのかという話もあるので、MacBinaryIII だけ
でよかったりしませんかね。
この辺りの事情は分かりませんが、すでに I, II は全滅しているのでは
ないかと思ったりします。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E