(
info: &BY_HANDLE_FILE_INFORMATION,
reparse_tag: u32,
basic_info: Option<&FILE_BASIC_INFO>,
id_info: Option<&FILE_ID_INFO>,
)
| 173 | } |
| 174 | |
| 175 | fn attribute_data_to_stat( |
| 176 | info: &BY_HANDLE_FILE_INFORMATION, |
| 177 | reparse_tag: u32, |
| 178 | basic_info: Option<&FILE_BASIC_INFO>, |
| 179 | id_info: Option<&FILE_ID_INFO>, |
| 180 | ) -> StatStruct { |
| 181 | let mut st_mode = attributes_to_mode(info.dwFileAttributes); |
| 182 | let st_size = ((info.nFileSizeHigh as u64) << 32) + info.nFileSizeLow as u64; |
| 183 | let st_dev: libc::c_ulong = if let Some(id_info) = id_info { |
| 184 | id_info.VolumeSerialNumber as _ |
| 185 | } else { |
| 186 | info.dwVolumeSerialNumber |
| 187 | }; |
| 188 | let st_rdev = 0; |
| 189 | |
| 190 | let (st_birthtime, st_ctime, st_mtime, st_atime) = if let Some(basic_info) = basic_info { |
| 191 | ( |
| 192 | large_integer_to_time_t_nsec(basic_info.CreationTime), |
| 193 | large_integer_to_time_t_nsec(basic_info.ChangeTime), |
| 194 | large_integer_to_time_t_nsec(basic_info.LastWriteTime), |
| 195 | large_integer_to_time_t_nsec(basic_info.LastAccessTime), |
| 196 | ) |
| 197 | } else { |
| 198 | ( |
| 199 | file_time_to_time_t_nsec(&info.ftCreationTime), |
| 200 | (0, 0), |
| 201 | file_time_to_time_t_nsec(&info.ftLastWriteTime), |
| 202 | file_time_to_time_t_nsec(&info.ftLastAccessTime), |
| 203 | ) |
| 204 | }; |
| 205 | let st_nlink = info.nNumberOfLinks as i32; |
| 206 | |
| 207 | let st_ino = if let Some(id_info) = id_info { |
| 208 | let file_id: [u64; 2] = unsafe { core::mem::transmute_copy(&id_info.FileId) }; |
| 209 | file_id |
| 210 | } else { |
| 211 | let ino = ((info.nFileIndexHigh as u64) << 32) + info.nFileIndexLow as u64; |
| 212 | [ino, 0] |
| 213 | }; |
| 214 | |
| 215 | if info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT != 0 |
| 216 | && reparse_tag == IO_REPARSE_TAG_SYMLINK |
| 217 | { |
| 218 | st_mode = (st_mode & !(S_IFMT as u16)) | (S_IFLNK as u16); |
| 219 | } |
| 220 | let st_file_attributes = info.dwFileAttributes; |
| 221 | |
| 222 | StatStruct { |
| 223 | st_dev, |
| 224 | st_ino: st_ino[0], |
| 225 | st_mode, |
| 226 | st_nlink, |
| 227 | st_uid: 0, |
| 228 | st_gid: 0, |
| 229 | st_rdev, |
| 230 | st_size, |
| 231 | st_atime: st_atime.0, |
| 232 | st_atime_nsec: st_atime.1, |
no test coverage detected