internal static StatStruct BuildStatStruct(FileSystemInfo info, FileAttributes attributes, string path)
{
StatStruct result;// = new StatStruct();
uint device = unchecked((uint)(char.ToLower(info.FullName[0]) - 'a')); // index of the disk
ushort mode = (ushort)BuildMode(info, attributes, path);
long atime, mtime, ctime;
atime = ToStatUnixTimeStamp(info, (_info) => _info.LastAccessTimeUtc);
mtime = ToStatUnixTimeStamp(info, (_info) => _info.LastWriteTimeUtc);
ctime = ToStatUnixTimeStamp(info, (_info) => _info.CreationTimeUtc);
result.st_dev = device; // device number
result.st_ino = 0; // inode number
result.st_mode = mode; // inode protection mode
result.st_nlink = 1; // number of links
result.st_uid = 0; // userid of owner
result.st_gid = 0; // groupid of owner
result.st_rdev = device; // device type, if inode device -1
result.st_size = 0; // size in bytes
FileInfo file_info = info as FileInfo;
if (file_info != null)
{
result.st_size = file_info.Length;
}
result.st_atime = atime; // time of last access (unix timestamp)
result.st_mtime = mtime; // time of last modification (unix timestamp)
result.st_ctime = ctime; // time of last change (unix timestamp)
//result.st_blksize = -1; // blocksize of filesystem IO (-1)
//result.st_blocks = -1; // number of blocks allocated (-1)
return result;
}