time_t filetimeToUnixTime(const FILETIME *ft) { if (!is_filetime_set(ft)) return 0; ULONGLONG ll = (ULONGLONG(ft->dwHighDateTime) << 32) + ft->dwLowDateTime; return time_t((ll - 116444736000000000LL) / 10000000LL); }
int impl_fuse_context::helper_set_time_struct(const FILETIME *filetime, const time_t backup, time_t *dest) { if (is_filetime_set(filetime)) *dest = filetimeToUnixTime(filetime); else if (backup != 0) *dest = backup; else return -EINVAL; return 0; }