change_symlink_owner()
ファイルの属性、時間、オーナーを変更する関数を追加しました。
file_status.cppの差分
extract.cppの差分
これで、extract.cppも#ifdefの分岐がなくなりました。
簡単な説明、デザインの論拠とかを書いておきます。
// ファイルの属性とパーミッションを変更する void file_mode(const path& p, file_attributes attr, file_permissions perm);
POSIXのファイルモードをファイル属性とパーミッションに分けてしまったので、2つを渡す形になりました。
Windowsでは、パーミッションを無視します。
// 最終更新時間を変更する void last_write_time(const path& p, const timestamp& new_time); // 最終アクセス時間を変更する void last_access_time(const path& p, const timestamp& new_time); // ファイル作成時間を変更する void creation_time(const path& p, const timestamp& new_time);
Boost.Filesystemに似た形式で、3つの時間を個別に設定するようにしました。
creation_time()はPOSIXでは何もしません。
// ファイルのオーナー/グループを変更する void change_owner( const path& p, const optional<intmax_t>& new_uid, const optional<intmax_t>& new_gid); // シンボリックリンクのファイルのオーナー/グループを変更する void change_symlink_owner( const path& p, const optional<intmax_t>& new_uid, const optional<intmax_t>& new_gid);
uidとgidをバラバラに変更すると少し意味が変わってくるので、こちらは同時に設定します。
ただ、完全にPOSIX専用のインターフェースなのが気になります。
Windowsでファイルのオーナーを変更したい場合にほとんど遭遇したことがないので、とりあえずWindowsだと何もしません。