リパースポイント

TR2互換のsymlink_status()を実装しました。
file_status.cppの差分
Windows用の実装ではリパースポイント(re-parse:再解析の意)を考慮したものになっています。
POSIXのstat()がターゲットの情報を返すのに対し、WindowsのGetFileAttributesEx()やFindFirstFile等の関数がリパースポイント自身の情報を返すことに注意が必要です。
http://msdn.microsoft.com/library/en-us/fileio/fs/symbolic_link_effects_on_file_systems_functions.asp
ターゲットの情報を得たい場合は、FILE_FLAG_OPEN_REPARSE_POINTフラグ付きでオープンし、ファイルハンドル経由の関数を使うことになります。
DeviceIoControl()でターゲットのパスを取得する方法もありますが、リパースポイントが連鎖している場合はかなり面倒になります。


例によって、POSIX用の実装はlstat()を呼ぶだけです。