MCPcopy Index your code
hub / github.com/RustPython/RustPython / attribute_data_to_stat

Function attribute_data_to_stat

crates/common/src/fileutils.rs:175–243  ·  view source on GitHub ↗
(
        info: &BY_HANDLE_FILE_INFORMATION,
        reparse_tag: u32,
        basic_info: Option<&FILE_BASIC_INFO>,
        id_info: Option<&FILE_ID_INFO>,
    )

Source from the content-addressed store, hash-verified

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,

Callers 1

fstatFunction · 0.70

Calls 3

file_time_to_time_t_nsecFunction · 0.85
attributes_to_modeFunction · 0.70

Tested by

no test coverage detected