2007-01-01から1ヶ月間の記事一覧

"SL" System Use Entry

昨日のVistaでの問題は、UACに対応してもテストの途中で何度もボタンを押すことになって不便なので、コマンドプロンプトを管理者権限で起動することで回避することにしました。 さて、今日から開発を再開です。 今日はiso_image_file_sourceでシンボリックリ…

アップグレード完了

Windows Vista Ultimateにアップグレードしました。 事前にファイルを整理していたもののインストール時間はあまり変わりませんでした。 インデックス作成ではなくて、ショートカットのリンク先の修正に時間がかかっていたのかもしれません。 (Vistaでは多く…

続 アップグレード予行練習

XPに戻してソースコードを整理しました。 (Vistaをアンインストールできるわけではなくて、Norton Ghostのリストアです。)既定ではインデックスの対象となるのは、ホームディレクトリ(C:\Users\ユーザー名)配下だけなので、最近使っていないファイルは別のド…

アップグレード予行練習

Vistaインストール前にドライブ毎バックアップ取ったので、ついでにVista(RC1)にアップグレードしてみました。 インストールに掛かった時間はおよそ6時間半でした。 進行表示が「インストールの最終処理を実行しています。」に移ってから4時間以上終わりま…

コンパイラのメモリ使用量

最近、メモリのスワップが激しくて、そろそろマシン買い替えかなぁと考えていたのですが、Hamigaki.Binaryのコンパイルでメモリを食いすぎているような気がして、タスクマネージャで調べてみました。 結果、uniso.cppのコンパイルに700MBも使ってました。(VC…

タイムゾーンオフセット

タイムゾーンオフセットを取得しようとして詰まりました。 POSIXならtimezone、Windowsなら_timezoneを見れば済むと思っていたのですが、このグローバル変数はtzset()やlocaltime()などを呼ぶまで設定されないようになっています。 それでもシングルスレッド…

date_time

予定通りBoost.DateTimeを使ってiso9660::date_timeとfilesystem::timestampの相互変換を実装してみました。 date_time.hppの差分binary_date_time→timestampの場合はこんな感じです。 struct binary_date_time { boost::optional<filesystem::timestamp> to_timestamp() const { us</filesystem::timestamp>…

"TF" System Use Entry

"PX"(ファイルモードとuid/gid)と"TF"(各種ファイル時間)のSystem Use Entryに対応しました。 iso_image_file_source_impl.hppの差分"TF" System Use Entryで扱う時間は次のいずれかの形式です。 struct date_time { char year[4]; char month[2]; char day[…

Rock Ridge

iso_image_file_sourceでRock Ridgeをサポートしました。 とりあえず、ファイル名を記録している「"NM" System Use Entry」だけパースしています。 iso9660_file_source_impl.hppの差分 iso_image_file_source_impl.hppの差分 これまではJolietのボリューム…

"CE" Sytem Use Entry

iso9660_file_sourceにSystem Use Sharing Protocol(SUSP)を実装しました。 iso9660_file_source_impl.hppの差分 SUSPはディレクトリレコードの末尾にある自由領域「Sytem Useフィールド」を使います。 ディレクトリレコードのサイズは1バイトで記録されてい…

System Use Sharing Protocol

ISO 9660の作業に戻りました。 iso9660_file_sinkのJoliet対応が面倒なのと対応フォーマットを増やすたびにコードの構造が大きく変わりそうな気がしたので、先にiso9660_file_sourceの対応フォーマットを増やすことにしました。 というわけで、POSIX用の拡張…

カスタムメンバ

Hamigaki.Binaryのドキュメントにメンバポインタが使えない場合の例を追加しました。 http://hamigaki.sourceforge.jp/doc/html/binary/advanced_topics.html in_addrは元からビッグエンディアンになっていてHamigaki.Binaryを使うのも妙なので、別の例とし…

struct_traitsのカスタマイズ

struct_traitsでメンバポインタが取得できない場合の対応策を考えてみました。 // メンバ入出力カスタマイズ用の構造体 struct in_addr_s_addr { // 構造体の型 typedef in_addr struct_type; // メンバ変数の型 typedef in_addr_t member_type; // 出力時の…

続 Hamigaki.BinaryのTutorial

パディングと入れ子の例を追加しました。 http://hamigaki.sourceforge.jp/doc/html/binary/tutorial.html 構造体の入れ子の扱いを説明するのに適当な例題が見つからず、妙な説明になっています。 ddsファイルのヘッダとして、DDSURFACEDESC2構造体を取り上…

Hamigaki.BinaryのTutorial

Hamigaki.BinaryのTutorialを書き始めました。 http://hamigaki.sourceforge.jp/doc/html/binary/tutorial.html Tutorialと英語表記なのは、カタカナだと別の意味で検索してくる人が多いからです。 Tutorialの題材として、最初に思いついたのはIPv4アドレス…

続 Hamigaki.Binary

Hamigaki.Binaryのリファレンスを追加しました。 http://hamigaki.sourceforge.jp/doc/html/binary/reference.html いつも通り、内容のほとんどないリファレンスですが、自分が仕様を再確認する程度には役立っています。 ドキュメントを書いていて、Hamigaki…

Hamigaki.Binary

Hamigaki.Utilityという名前でドキュメントの序文を書き始めたら、自分でも何のライブラリか説明できなかったので、Hamigaki.Binaryという名前に変更しました。 今日の更新ファイルは多いですが、ヘッダもサブディレクトリに移した為で、実質何も変わってい…

Hamigaki.Utility

hamigakiディレクトリ直下のファイル(エンディアン、バイナリI/O)をHamigaki.UtilityHamigaki.Binaryという名前で呼ぶことにして、テストコードを用意しました。 libs/utility/test/ libs/binary/test/ (01/15追記:Hamigaki.Binaryに改名、リンク先を修正し…

iso9660_file_sink

iso9660_file_sinkを実装しました。 iso9660_file_sink_impl.hpp 自分で作ったisoファイルをマウントしてエクスプローラで閲覧すると、喜びも一入です。 昨日悩んでいたディレクトリ情報やディレクトリ構造の持ち方ですが、 // ディレクトリエントリの情報 s…

iso_file_sink

ISO 9660の出力を考えています。 流れとしては、 ヘッダ(ボリューム記述子など)をダミーで埋める 各ファイルの内容を出力する フッタ(パステーブル、ディレクトリレコード)を出力する シークで戻ってヘッダを埋めなおす となります。 処理2で各エントリの情…

default_ endian

バイナリ入出力に"default_"エンディアンなるものを追加しました。 endian.hppの差分 binary_io.hppの差分 これまで扱ってきた多くのフォーマットは、フォーマットあるいはデータフィールド毎にエンディアンが決まっていました。 しかし、ISO 9660では一つの…

mem_var_less

構造体のメンバ変数でソート/二分探索することって意外と多い気がします。 ラムダやバインダを使うと長くて読みにくく、いつも手作業でファンクタを書いていました。 毎回書くのも面倒になってきたので、mem_funやlessに似せて汎用のファンクタを作りました…

iso9660_file_reader

Joliet対応でぐちゃぐちゃになったコードを整理しました。 iso9660_file_source_impl.hppの差分 実装上、ISO 9660とJolietの違いは、 ファイルIDの比較方法 ファイルIDからファイルパスへの変換 だけなので、これらの操作だけ抽象クラスにまとめれば、至ると…

Order of Directory Records

Jolietのテストをしていて、RecordNow DXがJoliet仕様と違う出力をする場合があることに気が付きました。 ISO 9660ではディレクトリエントリの情報を予めソートした状態で格納します。 各エントリには「ベース名.拡張子;バージョン番号」形式のファイルIDが…

続 Joliet

なんとかJolietの読み出しができました。 iso9660_file_source_impl.hppの差分 実際に実装してみて分かったのですが、JolietはISO 9660の拡張であるものの、ISO 9660の上位にあるものではなく、並列に存在するもののようです。 なので、joliet_file_sourceの…

Joliet

Jolietの仕様はWikipedia経由でここに見つかりました。 http://bmrc.berkeley.edu/people/chaffee/jolspec.html ISO 9660ではISO 2022のエスケープシーケンスをサポートしていて、エスケープシーケンスに応じてボリューム情報やパス情報を持つことができます…

iso_image_file_source

iso9660_file_sourceのラッパーとして、iso_image_file_sourceを作成しました。 iso_image_file_source_impl.hpp iso9660_file_source_impl.hppの差分 昨日書いていたように、関連ファイルと最新版以外のファイルを読み飛ばしているだけです。 ファイル名の…

iso9660_file_source

なんとかisoファイルの読み込みができるようになりました。 iso9660_file_source_impl.hpp ファイルの列挙は、ディレクトリレコードの順に深さ優先で行っています。 まだこのままでは実用的でなくて、ISO 9660のサポートする、 バージョン番号付きファイル名…

both-byte orders

iso9660_file_sourceを作成中ですが、出来上がらなかったので構造体のヘッダだけアップしました。 hamigaki/archivers/iso9660/ ISO 9660で扱うデータはリトルエンディアンとビッグエンディアンのハイブリッド構造になっています。 例えば、16ビットの0x1234…

ISO 9660の論理セクタ

ISO 9660の規格を読んでいると、"sectors"と"Logical Sectors"という表現が何度も出てくるのですが、"sectors"の解説が見当たりませんでした。 Wikipediaで調べてみると、 wikipedia:CD-ROM どうやらCDの物理的なセクタのことのようです。 ISO 9660自体はフ…