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

fpos

Level0/1ヘッダのシンボリックリンク書き出しに対応しました。 raw_lzh_file_sink_impl.hppの差分 CodeWarriorでコンパイルできず気が付いたのですが、std::fposはデフォルトコンストラクタがないんですね。(27.4.3.2) VCやg++だと、デフォルトコンストラク…

Subversionへ移行

SF.jpのSubversionの試験サポートが始まったのでCVSから移行してみました。 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/hamigaki/trunk/?root=hamigaki プロジェクトページのリンクがCVSのままなので、しばらくはCVSも更新します。 移行時のSVN属性に関…

append_lha

LZHファイルの追記サンプルを作成しました。 append_lha.cpp lhaサンプルとほぼ同じですが、初期化の部分だけ違います。 io_ex::file_sink file; try { // 読み書き(truncなし)でオープンを試みる file.open(argv[1], std::ios_base::binary|std::ios_base::…

Level1ヘッダの出力

Level1ヘッダの出力も実装しました。 raw_lzh_file_sink_impl.hppの差分 圧縮/解凍のサンプルも移行完了でバッチリ、と思ったんですが、Cygwinでコンパイルエラー。 namespace hamigaki { namespace archivers { namespace lha { namespace unix { struct gi…

Level0ヘッダの出力

Hamigaki.Archiversにファイルをコピーして、Level0ヘッダの出力を実装しました。 lha::headerに追加したフィールドlevelでヘッダの形式を選択できます。 raw_lzh_file_sink_impl.hpp Hamigaki.Iostreamsからの移行途中なので、古い実装も残っています。 ま…

SHA-1

ちょっと寄り道でHamigaki.ChecksumにSHA-1を追加しました。 <hamigaki/checksum/sha1.hpp> テストコード 最初、RFCに載っているテストケースを読み違えていて、"a"のハッシュ値を計算していました。 本当のテストケースは、"a"を1000000個繋いだ文字列でした。 同じ勘違いをした人もいる</hamigaki/checksum/sha1.hpp>…

delete_lha

raw_lzh_file_sourceとraw_lzh_file_sinkを使って、LZHファイルからエントリを削除するプログラムを作ってみました。 #include <hamigaki/iostreams/device/raw_lzh_file.hpp> #include <boost/filesystem/convenience.hpp> #include <boost/filesystem/operations.hpp> #include <boost/iostreams/copy.hpp> #include <clocale> #include <exception> #include…</exception></clocale></boost/iostreams/copy.hpp></boost/filesystem/operations.hpp></boost/filesystem/convenience.hpp></hamigaki/iostreams/device/raw_lzh_file.hpp>

エントリの削除

アーカイブからエントリを削除する操作は、実際には残すエントリだけ他のファイルにコピーすることです。 削除するエントリをファイル名で指定する場合、最低限必要なヘッダ情報は、 ファイル名 エントリサイズ(圧縮サイズ) の2つです。 これらが基本ヘッダ…

Wii Sports

http://wii.com/jp/movies/sports-03-jp-a/ 思わずディスプレイに向かって拍手してしまいました。

Hamigaki.Archivers

ごちゃごちゃしてきたので、アーカイバ関連のコードをHamigaki.Archiversとして分離させようと思います。 (複数形なのは多分archiverというクラスを作るため) 最初は単にファイルを移動するだけにしようと思っていたのですが、行き当たりばったりに作ってき…

\WINDOWS\SYSTEM32\CONFIG\SYSTEM

友人から \WINDOWS\SYSTEM32\CONFIG\SYSTEM が壊れたとの連絡を受け、 http://support.microsoft.com/kb/436927/ja に従って修復を試みたところ、見事に失敗しました。 XPのロゴが出た後、メッセージボックスが出てすぐにリブートするようになり、回復コンソ…

VistaでDanteWinが動かない件

「Windows Vista アプリケーションの互換性検証と対応ポイント」を見て、「今頃各社Vista対応で大変そうだなぁ」などと考えていたのですが、他人事ではありませんでした。 今更ながら、Vista RC1で拙作「Dante98 for Windows」を試してみたところ、ブルース…

change_attributes()

結局、「ファイル属性=MS-DOSファイル属性」、「ファイル許可属性=POSIXパーミッション」と割り切ることにしました。 元に戻っただけですね。 これに合わせ、file_mode()はchange_attributes()とchange_permissions()に分離しました。 file_status.cppの差分…

ドキュメント追加

Hamigaki.Filesystemのドキュメントも作成しました。 http://hamigaki.sourceforge.jp/libs/filesystem/ 長いこと書いてなかったので、BoostBookのタグをかなり忘れていました。 書いていて気が付いたこと。 「ファイル属性」と「ファイル許可属性」を並べて…

remove_all()

ファイル/ディレクトリを再帰的に削除する関数remove_all()を追加しました。 operations.hppの差分 Boost.Filesystemにもありますが、こちらはWindowsのリパースポイントに対応しています。 久々にテストも追加しました。 remove_all_test.cpp status_test.c…

シンボリックリンクのターゲットを消す方法

DeleteFile If the path points to a symbolic link, the symbolic link is deleted, not the target. To delete a target, you must call CreateFile and specify FILE_FLAG_DELETE_ON_CLOSE. なるほど。 ターゲットを消したい状況が思いつきませんけど。

change_symlink_owner()

ファイルの属性、時間、オーナーを変更する関数を追加しました。 file_status.cppの差分 extract.cppの差分 これで、extract.cppも#ifdefの分岐がなくなりました。 簡単な説明、デザインの論拠とかを書いておきます。 // ファイルの属性とパーミッションを変…

acl_dump

なんとかACLからCygwinっぽいパーミッション情報を引き出すことができました。 ただ、実際に使ってみるとあまり甘みがないことが分かり、ボツになりました。 例えばWindowsのホームディレクトリをCygwinで見ると、 $ ls -ld /cygdrive/c/Documents\ and\ Set…

argv[0]

Binary Hacksがようやく届き、ざっと目を通しました。 HACK#64の「実行中のプロセスのパス名をチェックする」を読んで、実行中に実行ファイルを移動したらどうなるのかと思い、試してみました。 まずは、Linux。(ファイル移動の時間稼ぎのためgets()が入って…

パーミッションとACL

Hamigaki.Filesystemをarchiveサンプルに組み込んでみました。 archive.cppの差分 これで一応、#if defined(BOOST_WINDOWS)がなくなりました。 file_statusも少し変更しました。 file_status.hppの差分 file_status.cppの差分 file_attributesにread_onlyを…

create_symlink()

ハードリンクとシンボリックリンクの作成関数を追加しました。 symlink.cppの差分 id:y-hamigaki:20061110 に書いたとおり、Vistaのシンボリックリンクはファイルとディレクトリで別物なので、それぞれcreate_file_symlink()とcreate_directory_symlink()を…

続 Vistaのシンボリックリンク

symlink_target()をWindows Vistaのシンボリックリンクに対応させました。 symlink.cppの差分 絶対/相対/UNCパスへのシンボリックリンクでテスト済みです。 シンボリックリンクの作成にはAdministrator権限が必要ですが、リンク先の読み出しだけなら通常の権…

DQコンサート

行ってきました。 音響的なことは分かりませんが、すごく聞きやすかったです。 コンマスに見覚えがあったので、ググってみたら都響のコンマスでした。 そりゃ、見覚えあるはずです。3回ぐらい聴いてますから。 スペースの関係上、打楽器が隠れて見えなかっ…

symlink_target()

とり急ぎPOSIX用の実装を追加しました。 symlink.cppの差分 read_link()はsymlink_target()に変えました。 stat()でサイズを調べてからreadlink()を呼ぶまでに競合状態があります。 クラッシュするわけではないので良しとしましょう。 DQコンサートがあるん…

バイナリアン度チェック

http://0xcc.net/binhacks/quiz.html 86点。 間違えたのは、Q.3(ldd)とQ.10(a=-1)の2つです。 まぁ、昔クイズやってたので、答え分からなくてもある程度読みで解けるんですけどね。 Q.4(スタックの方向)とQ.14(神秘的理由)は読みです。 う〜ん、選択肢を見…

read_link()

シンボリックリンクのターゲットパスを取得する関数read_link()を実装しました。 symlink.cpp リパースポイントの仕様を調べるのに時間がかかって、実装が中途半端です。 現状、Windows 2000/XPのジャンクションのみで、VistaのシンボリックリンクとPOSIX用…

Vistaのシンボリックリンク

Vistaのシンボリックリンクを調べたくて、今更ながらRC1をVirtual PCにインストールしました。 インストールの所要時間は1時間程度でした。 Vistaのシンボリックリンクを作成するには、mklinkというコマンドを使います。 このコマンドはAdministrator権限を…

リパースポイント

TR2互換のsymlink_status()を実装しました。 file_status.cppの差分 Windows用の実装ではリパースポイント(re-parse:再解析の意)を考慮したものになっています。 POSIXのstat()がターゲットの情報を返すのに対し、WindowsのGetFileAttributesEx()やFindFirst…

status()

ファイル情報を取得する関数status()を実装しました。 file_status.hppの差分 file_status.cpp サンプル typeのsparse_fileはやめて、attributesに移動しています。 http://en.wikipedia.org/wiki/NTFS を見て、NTFSがPOSIX互換の状態変更時間をサポートして…

file_status

TR2の<filesystem>を参考にファイル情報のクラスを作成しました。 <hamigaki/filesystem/file_status.hpp> TR2のfile_statusはファイルの種類しか管理しないので、それ以外の必要なメンバを追加しています。 POSIXのmode_tとMS-DOSファイル属性を混ぜこぜにして、file_type、file_attributes、file_permissions</hamigaki/filesystem/file_status.hpp></filesystem>…