mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 08:13:44 +01:00
Common (Windows): adds a universal function ffFileTimeToUnixMs and use it
This commit is contained in:
+10
-1
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user