Archivers

tar_replace_test

フォーラムで質問があったtarファイルの部分書き換えのテストを追加しました。 libs/archivers/test/tar_replace_test.cpp lzh_replace_test.cppを書き換えただけなので、実質作業時間は2〜3分程度です。 なかなか作業時間がとれない、、、。

Unicode対応完了

今度こそHamigaki.ArchiversのUnicode対応が終わったので、ドキュメントにもフォーマット毎の対応状況を追記しました。 http://hamigaki.sourceforge.jp/doc/html/archivers/format.html cpio書庫は仕様で「ISO/IEC 646:1991 standard IRV」(=ASCII)を使うよ…

tarのUTF-8対応 その2

wpath版paxフォーマットのテストを追加しました。 tar_pax_wide_test.cpp で、シンボリックリンクがUTF-8になってなかったので修正しました。 tar_file_sink_impl.hppの差分 あと、pax拡張ヘッダのcharsetレコードに対応しました。 差分 このレコード、「ヘ…

tarのUTF-8対応

POSIXの仕様を眺めていたら、tarのpax形式は文字列にUTF-8を使うことに気が付いて、tarもwpath版を用意しました。 wtar_file_sinkの差分 wtar_file_sourceの差分 ustar_file_{sink,source}はUnicodeと関係ないのでナロー版しかありません。

ISOイメージのUnicode対応 その2

ISOイメージのUnicodeファイル名の読み込みに対応しました。 差分 コンパイル通らないところに片っ端からテンプレート引数を足してるだけなんで、かなり無駄な部分があると思います。 あれ?シンボリックリンクはRockRidgeしか使わないので、wpathにならない…

ISOイメージのUnicode対応 その1

今度は、ISOイメージのUnicode対応です。 ISO 9660の拡張として、文字列にUCS-2を使うMicrosoftのJoliet拡張があります。 今回はこれでwpathの値をそのまま格納することになります。 例によって、まず書き出しのみ実装しました。 差分 読み込みは実装中です。…

ZIPのUnicode対応 その3

今日はZIPのドキュメント更新しただけです。 http://hamigaki.sourceforge.jp/doc/html/archivers/format.html#archivers.format.zip ZIPのwpath対応も一応終了です。 TODO: UTF-8環境ならナロー版でもLanguage encoding flagを立てる ISOイメージのwpath対…

ZIPのUnicode対応 その2

「Info-ZIP Unicode Path Extra Field」に対応しているアーカイバが見当たらなかったので、昨日の方針を変更して、PKZIP方式を採用しました。 差分 さらにMac OS Xだと、PKZIP方式のフラグを立てずにUTF-8で格納するようで、ShiftJIS環境で展開するとファイ…

ZIPのUnicode対応

LHAが済んだので今度はZIPです。 ざっと調べた限り、ZIPのファイル名には次の四種類があるようです。 既定のIBMコードページ437 UTF-8(General Purpose Bit Flagの11ビット目が立っている場合) 同じくUTF-8(Info-ZIP Unicode Path Extra Fieldを使う) ネイテ…

Unicodeファイル名 その4

Unicodeファイル名の読み込みに対応しました。 差分 読み書きの動作確認が出来たところで、Hamigaki.Charsetで実装したコードページの変換処理も組み込みました。 差分 UNLHA32.DLLのドキュメントを見ると、レベル1ヘッダはUnicodeとコードページに対応して…

Unicodeファイル名 その3

LHAのファイル名出力をHamigaki.Charsetを使って書き直しました。 差分 まだコードページはCP_ACPのままで、ヘッダに入っている値は使ってません。要修正。 UTF-16出力部分がsizeof(wchar_t)==4の環境でバグっていた(というかUCS-2を想定していた)ので別途作…

LHAの絶対パス

LHA書庫内の絶対パスの扱いがバグっていたので修正しました。 差分 Boost.Filesystemだと、「C:\foo」が「C:」-「/」-「foo」に分解されるので、そのまま繋いで「C:\/\foo」みたいにしていました。 テストコードにも絶対パスのテストを追加しています。

Unicodeファイル名 その2

Unicodeファイル名の出力がバグってたので修正しました。 差分 動作確認用にUnicode版の簡易アーカイバも作りました。 wlha.cpp LHMeltで確認した限り、うまくいっているようです。 とりあえずWindowsでは動いてますが、それ以外では問題ありです。 Windows…

Unicodeファイル名 その1

Unicodeファイル名の書き出しを実装してみました。 差分 古いテスト(ナロー版)は通っていますが、ワイド版はまだコンパイル通しただけです。 ヘッダの構造体はlha::basic_header<Path>に変わっていて、headerとwheaderのtypedefを追加しています。 あと、ワイド版</path>…

続 releaseツール

GNU tar互換形式の出力でパスの記録方式が間違っていたのを修正しました。 差分 これでtar.bz2の出力が動くようになったので追加しました。 差分 ISOイメージにはZIPとtar.bz2も追加するようにしています。

ISO 9660:1999

今日はISO 9660:1990の拡張ボリューム記述子に対応しました。 iso_directory_writer.hppの差分 拡張ボリューム記述子はISO 9660:1988の副ボリューム記述子の一種で、 ファイル名は207文字まで ファイル名(ベース名)、拡張子、バージョン番号の区切りなし デ…

ISO 9660 Level 3

今度こそISO 9660 Level 3に対応しました。 iso_file_sink_impl.hpp iso_file_source_impl.hpp ISO Level2とLevel3の違いは、Level3が複数エクステントに対応していることです。 ISO 9660では構造上、エクステント(ファイルの内容)のサイズが4GBまでに制限さ…

ISO 9660 Level 2

ISO 9660 Level 3に対応といきたいところですが、Level 2の出力が未実装だったので先に対応しました。 iso_directory_writer.hppの差分 Level 1/2の選択は、ボリューム記述子で行うことにしました。 #include <hamigaki/archivers/iso_file.hpp> namespace ar = hamigaki::archivers; void hog</hamigaki/archivers/iso_file.hpp>…

iso_date_time_test

今日もISOイメージのテスト追加とドキュメント加筆です。 Rock Ridgeのテストで、mkisofsが使用しているRRIP 1991Aとドラフト規格IEEE P1282の両方に対応させ、シンボリックリンクのテストも追加しました。 rock_ridge_test.cppの差分 エントリヘッダで使用…

iso_file.hppのドキュメント

iso_file_source/iso_file_sinkのドキュメントを追加しました。 http://hamigaki.sourceforge.jp/doc/html/archivers/format.html#archivers.format.iso 未実装の機能も結構あったので、明示しておきました。 ISO 9660:1988 Level 3 は実装しておきたいとこ…

iso_file.hppのテスト

ISO 9660/Joliet/Rock Ridgeのテストを追加しました。 iso9660_test.cpp joliet_test.cpp rock_ridge_test.cpp テストでいくつか大きなバグも見つかったので修正しました。 空のディレクトリの出力がおかしかったバグの修正 再配置した箇所以外のディレクト…

iso_file_sink完成

残りのSystem Use Entryの出力を実装しました。 "TF" System Use Entry "PN" System Use Entry "SL" System Use Entry まだ未実装のSystem Use Entryも残っていますが、iso_file_sourceが対応しているものは全て実装できました。 明日からテストとドキュメン…

続 rr_movedとリンクカウント

ディレクトリの再配置後のリンクカウントの修正を実装しました。 rock_ridge_directory_writer.hppの差分 再配置後は、 /rr_moved/..が増えるため、ルートとルートへのハードリンク(/dir/..など)のリンクカウントが1増える 再配置されたディレクトリの数だけ…

rr_movedとリンクカウント

iso_file_sinkにリンクカウントの自動計測機能を追加しました。 iso_file_sink_impl.hppの差分 joliet_directory_writerのコードを弄りたくなかったので、basic_iso_file_sink_impl側であらかじめカウントするようにして、ディレクトリの再配置が発生したら…

"PX" System Use Entryの出力

かなりいい加減ですが、"PX" System Use Entry(ファイル属性)の出力を実装しました。 iso_file_sink_impl.hppの差分 現在判明している問題点は、 ルートディレクトリとrr_movedのファイル属性が出力されない ディレクトリのリンクカウントが正しくない です…

System Use Fieldの組み立て

"NM" System Use Entry(ファイル名)の出力を実装しました。 rock_ridge_directory_writer.hppの差分 "."や".."のSystem Use Fieldはリンク先のディレクトリのSystem Use Fieldからコピーするわけですが、"NM" System Use Entryで設定される名前はリンク先の…

続々 Rock Ridgeの再配置

ようやくRock Ridgeの再配置処理が実装できました。 rock_ridge_directory_writer.hppの差分 "CL"/"PL" System Use Entryのリンク先ブロック番号は、リンク先のレコードのポインタを記録しておいて、(ブロック番号が確定している)出力時に参照するようにしま…

続 Rock Ridgeの再配置

引き続きRock Ridgeの出力を実装中です。 他のコードに影響もないので書きかけのコードをコミットしました。 rock_ridge_directory_writer.hpp 昨日悩んでいたディレクトリの再配置は力技で、 7階層目のディレクトリ中にディレクトリのエントリが見つかった…

Rock Ridgeの再配置

Rock Ridgeの出力を実装中ですが、やはり深いディレクトリの再配置が難しいです。 今のところ判明している面倒なパターンは、 再配置とは無関係に/rr_movedディレクトリが含まれる場合 別ディレクトリ配下の同じ名前のディレクトリが再配置された場合 です。…

Jolietの出力

Jolietの出力を実装しました。 joliet_directory_writer.hpp iso_file_sink_impl.hppの差分 Jolietに対応したISOイメージファイルを作成する場合は、Joliet用の副ボリューム記述子を追加しておく必要があります。 #include <hamigaki/archivers/iso_file.hpp> namespace ar = hamigaki::archiv</hamigaki/archivers/iso_file.hpp>…