Common (Windows): adds a universal function ffFileTimeToUnixMs and use it

This commit is contained in:
李通洲
2026-03-16 13:49:49 +08:00
parent f7ebeb58e2
commit 8c72792e31
4 changed files with 16 additions and 12 deletions
+10 -1
View File
@@ -29,11 +29,20 @@ static inline double ffTimeGetTick(void) //In msec
#endif
}
#if _WIN32
static inline uint64_t ffFileTimeToUnixMs(uint64_t value)
{
if (__builtin_expect(__builtin_usubll_overflow(value, 116444736000000000ull, &value), false))
return 0;
return value / 10000ull;
}
#endif
static inline uint64_t ffTimeGetNow(void)
{
#ifdef _WIN32
uint64_t timeNow = ffKSystemTimeToUInt64(&SharedUserData->SystemTime);
return (timeNow - 116444736000000000ull) / 10000ull;
return ffFileTimeToUnixMs((uint64_t) timeNow);
#elif defined(__HAIKU__)
return (uint64_t) real_time_clock_usecs() / 1000u;
#else
+2 -1
View File
@@ -1,5 +1,6 @@
#include "disk.h"
#include "common/io.h"
#include "common/time.h"
#include "common/windows/unicode.h"
#include "common/windows/nt.h"
@@ -101,7 +102,7 @@ const char* ffDetectDisksImpl(FFDiskOptions* options, FFlist* disks)
if (fsVolume->VolumeLabelLength > 0)
ffStrbufSetNWS(&disk->name, fsVolume->VolumeLabelLength / sizeof(WCHAR), fsVolume->VolumeLabel);
if (fsVolume->VolumeCreationTime.QuadPart)
disk->createTime = ((uint64_t) fsVolume->VolumeCreationTime.QuadPart - 116444736000000000ull) / 10000ull;
disk->createTime = ffFileTimeToUnixMs((uint64_t) fsVolume->VolumeCreationTime.QuadPart);
}
if (fsAttr)
+2 -3
View File
@@ -1,5 +1,6 @@
#include "packages.h"
#include "common/io.h"
#include "common/time.h"
#include <inttypes.h>
#include <stddef.h>
@@ -52,9 +53,7 @@ bool ffPackagesReadCache(FFstrbuf* cacheDir, FFstrbuf* cacheContent, const char*
if (!NT_SUCCESS(NtQueryInformationFile(handle, &iosb, &fileInfo, sizeof(fileInfo), FileBasicInformation)))
return false;
if (fileInfo.LastWriteTime.QuadPart <= 116444736000000000ull) return false;
mtime_current = (fileInfo.LastWriteTime.QuadPart - 116444736000000000ull) / 10000ull;
mtime_current = ffFileTimeToUnixMs((uint64_t) fileInfo.LastWriteTime.QuadPart);
#endif
ffStrbufSet(cacheDir, &instance.state.platform.cacheDir);
+2 -7
View File
@@ -1,16 +1,11 @@
#include "users.h"
#include "common/windows/unicode.h"
#include "common/time.h"
#include <windows.h>
#include <wtsapi32.h>
#include <ws2tcpip.h>
static inline uint64_t to_ms(uint64_t ret)
{
ret -= 116444736000000000ull;
return ret / 10000ull;
}
const char* ffDetectUsers(FFUsersOptions* options, FFlist* users)
{
WTS_SESSION_INFO_1W* sessionInfo;
@@ -57,7 +52,7 @@ const char* ffDetectUsers(FFUsersOptions* options, FFlist* users)
PWTSINFOW wtsInfo = NULL;
if (WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, session->SessionId, WTSSessionInfo, (LPWSTR *) &wtsInfo, &bytes))
{
user->loginTime = to_ms(*(uint64_t*) &wtsInfo->LogonTime);
user->loginTime = ffFileTimeToUnixMs((uint64_t) wtsInfo->LogonTime.QuadPart);
WTSFreeMemory(wtsInfo);
}
}