Issue #13731 has been updated by kubo (Takehiro Kubo).


対応ありがとうございます。ReFSでの動作テストは明日行います。

stati128_handle() の以下の部分

~~~
	    st->st_ino = *((unsigned __int64 *)&fii);
	    st->st_inohigh = *((__int64 *)&fii + 1);
~~~

`&ffi` は `&ffi.FileId` の間違いでしょうか?


----------------------------------------
Feature #13731: inode for Windows on ReFS
https://bugs.ruby-lang.org/issues/13731#change-68262

* Author: kubo (Takehiro Kubo)
* Status: Closed
* Priority: Normal
* Assignee: usa (Usaku NAKAMURA)
* Target version: 
----------------------------------------
#11216 でWindowsでのinodeの代用としてBY_HANDLE_FILE_INFORMATION構造体の
メンバ、nFileIndexHigh/Lowを使っていますが、ReFS ではこの値ではユニークに
なりません。ReFSでは64ビットではなくて、128ビットでユニークな番号になります。

In https://msdn.microsoft.com/en-us/library/windows/desktop/aa363788(v=vs.85).aspx
  The ReFS file system, introduced with Windows Server 2012, includes
  128-bit file identifiers. To retrieve the 128-bit file identifier use the
  GetFileInformationByHandleEx function with FileIdInfo to retrieve the
  FILE_ID_INFO structure. The 64-bit identifier in this structure is not
  guaranteed to be unique on ReFS.

128ビットの数字を入れるには現行の struct stati64 では足りません。しかし、 #13726
のパッチが受け入れられたなら stat 構造体の定義が変わるので、ついでに st_ino を
128ビットにしたら(もしくは st_ino を 64ビットにして、64ビットのメンバをもうひと
つ追加したら)どうでしょうか?
ruby 2.5 になるタイミングならABI非互換の変更も入れられるでしょう。




-- 
https://bugs.ruby-lang.org/