hfspax
以下のPerlスクリプトで修正。なんか、微妙にファイルサイズが規格に合致してないかもだけど知らない。あと、100バイト以上のファイルパスに対応してないのではまるかも。基本的には、FINFリソースをustar形式のファイルから削除するというもの(当然、プログラムだったりすると起動できなくなる)。
#! /usr/bin/perluse strict;
use FileHandle;sub chop_nulls($) {
my $buffer = shift;
$buffer =~ s/\0+$//;
return $buffer;
}my $filepath = shift;
defined $filepath or die "Usage: $0 INPUT_FILEPATH > OUTPUT_FILEPATH\n";my $h = FileHandle->new($filepath);
defined $h or die "Couldn't open $filepath: $!";binmode $h;
binmode STDOUT;my $buffer;
my $size;
my $ignore;while (512 == read $h, $buffer, 512) {
if ($size <= 0) {
my $name = chop_nulls substr $buffer, 0, 100;
$size = oct chop_nulls substr $buffer, 124, 12;if ($name =~ m{/\.\.namedfork/finf$}) {
seek $h, -$size, 1;
$ignore = 1;
} else {
$ignore = undef;
}
}
else {
$size -= 512;
}print $buffer unless $ignore;
}