Filesystem

wpath対応(やり残し分)

昨日の変更でHamigaki.Archiversのサンプルプログラムがコンパイルできなくなっていたので、今日はその対応をしつつ、ドキュメント等のやり残し分を片付けました。 Boost.Systemを依存ライブラリのusage-requirementsに追加するように変更 一部オーバーロー…

wpath対応完了

POSIX版まで実装できたので、trunkに変更点をマージしました。 wpath対応差分 まだ、ドキュメントが古いインタフェースのままですが、実装は終了です。 次はHamigaki.Archiversもwpathに対応させてみます。

wpath対応 その4

一通りWindows版の実装ができました。 libs/filesystem2/src/windows/ ナロー版のみですが、以前のテストは全てパスしました。 残りはPOSIX版の実装です。 こちらはwpath::external_string_typeがstd::stringになっていて、APIの呼び出し毎にワイド文字からU…

wpath対応 その3

helpers.hppを分割して、create_file_symlink()とcreate_directory_symlink()を追加しました。 大分すっきりしました。 libs/filesystem2/src/windows/ 一箇所バグを見つけたので、Boost.Filesystemのパッチもあとで修正します。 現在、symlink_target()を書…

wpath対応 その2

Boost.Filesystemに寄稿したパッチから、create_symlink()をバックポートしました。 今日の差分 #ifdefの嵐で早くも読みにくくなってきました。 Ansi/Wide関数、オプション(状態更新時間、リパースポイント)を個別ファイルに分割したほうがよさそうです。

wpath対応 その1

Hamigaki.Filesystemをwpathに対応させる改良を始めました。 今日の差分 とりあえず、Windows版のfile_status.cppだけ書き直しました。 実装形式はBoost.Filesystemに揃えています。 例えば、status()の場合、 namespace detail { // 実装用 (非inline) file…

続 BOOST_CYGWIN_PATH

Cygwin on Windows 2000 on VMwareでテストをやり直しました。 Windows 2000でもHamigaki.Bjamのbjam_testとglob_testでプロセスが暴走するので調べてみたところ、assert()に失敗していて、その異常終了時に暴走するのはCygwinかBoost.Testの問題みたいでし…

BOOST_CYGWIN_PATH

Cygwinで半年以上テストしていなくて、Boost1.34.1になってから初めてテストしました。 i18n対応の関係でWindows用の実装が既定で使われるようになっていることに今更気が付きました。 マクロの対応はこうです。 マクロ パス*1 API なし Windows Windows BOO…

patch for NTFS symbolic links

MLでBoost.FilesystemにNTFSシンボリックリンクのサポートを追加する話が出てたので、取り急ぎHamigaki.Filesystemからポートしたものを送ってみました。 http://svn.boost.org/trac/boost/ticket/1681 Hamigaki.Filesystemはワイド文字非対応のままだったの…

create_shell_link

今日はWindows VistaのGame Explorerを弄って遊んでました。 ショートカットファイルを作成する必要があったので、ついでにHamigaki.Filesystemにショートカット作成関数create_shell_link()を追加しました。 shell_link.cpp インタフェースは、 void create…

device_number

今日はデバイス番号を格納する"PN" System Use Entryを実装しようと思ったのですが、アーカイバ毎にデバイス番号の持ち方が違うため、これらを抽象化するための構造体、device_numberを考えてみました。 <hamigaki/filesystem/device_number.hpp> POSIXではファイルのデバイス番号はdev_t型で、stat(</hamigaki/filesystem/device_number.hpp>…

file_attributes

使い勝手が悪かったので、file_attributesとfile_permissionsにファイル種別のビットも混ぜました。 取得の場合にのみ有効で、設定時は無視されます。 Win32やPOSIXのAPIと同じ仕様ということです。 file_status.hppの差分 file_attributesとfile_permission…

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…

change_symlink_owner()

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

acl_dump

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

パーミッションと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権限が必要ですが、リンク先の読み出しだけなら通常の権…

symlink_target()

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

read_link()

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

リパースポイント

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>…

8.3 hack

Boost.Filesystemで見つけた面白いテクニックをご紹介。 C++標準のfstreamはコンストラクタやopen()メンバ関数の引数として、ナロー文字列を受け取ります。通常、この方法で扱うことのできるファイル名に使える文字はASCIIの英数字、記号、そして環境依存の…

Boost.Filesystemの国際化

試そうと思いつつも、延び延びになっていた国際化版Boost.Filesystemをテストしています。 こういうのは我々日本人が率先して行うべきなのでしょうが、言葉の壁は厳しく、わずか数行のバグ報告でも四苦八苦しています。(the the attachmentとか書いてるし) …