LZHのシンボリックリンク

lzh_file.hppをraw_lzh_file.hppに分離して、シンボリックリンクをサポートしました。
<hamigaki/iostreams/device/raw_lzh_file.hpp>
lzh_file.hppの差分


シンボリックリンクの実装方法は、
http://www2m.biglobe.ne.jp/~dolphin/lha/lha-slink.htm
を参考にしました。

$ ls -l
total 1
-rw-r--r-- 1 hamigaki なし 0 Oct 26 23:25 a.txt
lrwxrwxrwx 1 hamigaki なし 5 Oct 26 23:25 b.txt -> a.txt

の場合、ファイル名「b.txt」の代わりに「b.txt|a.txt」を書き込みます。
ディレクトリが絡む場合も、単純に繋いで最後のパス区切りでディレクトリとファイル名を分けるようです。

$ ls -l
total 1
drwxr-xr-x+ 3 hamigaki なし 0 Oct 26 23:31 dir3
lrwxrwxrwx  1 hamigaki なし 9 Oct 26 23:31 dir4 -> dir3/dirA

の場合、「dir4|dir3/dirA」を区切って、ディレクトリ=「dir4|dir3」、ファイル=「dirA」になります。
かなり妙な仕様で、本家LHa for UNIXでも、

$ lha x ../ab.lzh
a.txt   - Melted   :
LHa: invalid path name "b.txt"
LHa: Symbolic Link a.txt -> b.txt

変な警告が出ます。
また、リンクの向きが逆に見えますが、実際には正しくリンクされています。


なお、圧縮サンプルはシンボリックリンクに対応していますが、解凍サンプルはWindowsでの対処が面倒で対応していません。
Windowsのようにシンボリックリンクに対応していない環境(ジャンクションはありますが、、、)では、リンク先のファイルをアーカイブから検索して、その内容を出力する必要があります。