mirror of
https://github.com/aaru-dps/Aaru.Compression.Native.git
synced 2025-12-16 19:24:31 +00:00
Update to lzma 23.01.
This commit is contained in:
134
3rdparty/lzma/CPP/Windows/TimeUtils.h
vendored
134
3rdparty/lzma/CPP/Windows/TimeUtils.h
vendored
@@ -1,32 +1,146 @@
|
||||
// Windows/TimeUtils.h
|
||||
|
||||
#ifndef __WINDOWS_TIME_UTILS_H
|
||||
#define __WINDOWS_TIME_UTILS_H
|
||||
#ifndef ZIP7_INC_WINDOWS_TIME_UTILS_H
|
||||
#define ZIP7_INC_WINDOWS_TIME_UTILS_H
|
||||
|
||||
#include "../Common/MyTypes.h"
|
||||
#include "../Common/MyWindows.h"
|
||||
#include "PropVariant.h"
|
||||
|
||||
inline UInt64 FILETIME_To_UInt64(const FILETIME &ft)
|
||||
{
|
||||
return (((UInt64)ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
|
||||
}
|
||||
|
||||
inline void FILETIME_Clear(FILETIME &ft)
|
||||
{
|
||||
ft.dwLowDateTime = 0;
|
||||
ft.dwHighDateTime = 0;
|
||||
}
|
||||
|
||||
inline bool FILETIME_IsZero(const FILETIME &ft)
|
||||
{
|
||||
return (ft.dwHighDateTime == 0 && ft.dwLowDateTime == 0);
|
||||
}
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#define CFiTime FILETIME
|
||||
#define Compare_FiTime ::CompareFileTime
|
||||
inline void FiTime_To_FILETIME(const CFiTime &ts, FILETIME &ft)
|
||||
{
|
||||
ft = ts;
|
||||
}
|
||||
/*
|
||||
inline void FILETIME_To_FiTime(const FILETIME &ft, CFiTime &ts)
|
||||
{
|
||||
ts = ft;
|
||||
}
|
||||
*/
|
||||
inline void FiTime_Clear(CFiTime &ft)
|
||||
{
|
||||
ft.dwLowDateTime = 0;
|
||||
ft.dwHighDateTime = 0;
|
||||
}
|
||||
#else
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#if defined(_AIX)
|
||||
#define CFiTime st_timespec
|
||||
#else
|
||||
#define CFiTime timespec
|
||||
#endif
|
||||
int Compare_FiTime(const CFiTime *a1, const CFiTime *a2);
|
||||
bool FILETIME_To_timespec(const FILETIME &ft, CFiTime &ts);
|
||||
void FiTime_To_FILETIME(const CFiTime &ts, FILETIME &ft);
|
||||
void FiTime_To_FILETIME_ns100(const CFiTime &ts, FILETIME &ft, unsigned &ns100);
|
||||
inline void FiTime_Clear(CFiTime &ft)
|
||||
{
|
||||
ft.tv_sec = 0;
|
||||
ft.tv_nsec = 0;
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define ST_MTIME(st) st.st_mtimespec
|
||||
#define ST_ATIME(st) st.st_atimespec
|
||||
#define ST_CTIME(st) st.st_ctimespec
|
||||
#else
|
||||
#define ST_MTIME(st) st.st_mtim
|
||||
#define ST_ATIME(st) st.st_atim
|
||||
#define ST_CTIME(st) st.st_ctim
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
// void FiTime_Normalize_With_Prec(CFiTime &ft, unsigned prec);
|
||||
|
||||
namespace NWindows {
|
||||
namespace NTime {
|
||||
|
||||
bool DosTimeToFileTime(UInt32 dosTime, FILETIME &fileTime) throw();
|
||||
bool FileTimeToDosTime(const FILETIME &fileTime, UInt32 &dosTime) throw();
|
||||
bool DosTime_To_FileTime(UInt32 dosTime, FILETIME &fileTime) throw();
|
||||
bool UtcFileTime_To_LocalDosTime(const FILETIME &utc, UInt32 &dosTime) throw();
|
||||
bool FileTime_To_DosTime(const FILETIME &fileTime, UInt32 &dosTime) throw();
|
||||
|
||||
// UInt32 Unix Time : for dates 1970-2106
|
||||
UInt64 UnixTimeToFileTime64(UInt32 unixTime) throw();
|
||||
void UnixTimeToFileTime(UInt32 unixTime, FILETIME &fileTime) throw();
|
||||
UInt64 UnixTime_To_FileTime64(UInt32 unixTime) throw();
|
||||
void UnixTime_To_FileTime(UInt32 unixTime, FILETIME &fileTime) throw();
|
||||
|
||||
// Int64 Unix Time : negative values for dates before 1970
|
||||
UInt64 UnixTime64ToFileTime64(Int64 unixTime) throw();
|
||||
bool UnixTime64ToFileTime(Int64 unixTime, FILETIME &fileTime) throw();
|
||||
UInt64 UnixTime64_To_FileTime64(Int64 unixTime) throw(); // no check
|
||||
bool UnixTime64_To_FileTime64(Int64 unixTime, UInt64 &fileTime) throw();
|
||||
bool UnixTime64_To_FileTime(Int64 unixTime, FILETIME &fileTime) throw();
|
||||
|
||||
bool FileTimeToUnixTime(const FILETIME &fileTime, UInt32 &unixTime) throw();
|
||||
Int64 FileTimeToUnixTime64(const FILETIME &ft) throw();
|
||||
Int64 FileTime64_To_UnixTime64(UInt64 ft64) throw();
|
||||
bool FileTime_To_UnixTime(const FILETIME &fileTime, UInt32 &unixTime) throw();
|
||||
Int64 FileTime_To_UnixTime64(const FILETIME &ft) throw();
|
||||
Int64 FileTime_To_UnixTime64_and_Quantums(const FILETIME &ft, UInt32 &quantums) throw();
|
||||
|
||||
bool GetSecondsSince1601(unsigned year, unsigned month, unsigned day,
|
||||
unsigned hour, unsigned min, unsigned sec, UInt64 &resSeconds) throw();
|
||||
|
||||
void GetCurUtc_FiTime(CFiTime &ft) throw();
|
||||
#ifdef _WIN32
|
||||
#define GetCurUtcFileTime GetCurUtc_FiTime
|
||||
#else
|
||||
void GetCurUtcFileTime(FILETIME &ft) throw();
|
||||
#endif
|
||||
|
||||
}}
|
||||
|
||||
inline void PropVariant_SetFrom_UnixTime(NWindows::NCOM::CPropVariant &prop, UInt32 unixTime)
|
||||
{
|
||||
FILETIME ft;
|
||||
NWindows::NTime::UnixTime_To_FileTime(unixTime, ft);
|
||||
prop.SetAsTimeFrom_FT_Prec(ft, k_PropVar_TimePrec_Unix);
|
||||
}
|
||||
|
||||
inline void PropVariant_SetFrom_NtfsTime(NWindows::NCOM::CPropVariant &prop, const FILETIME &ft)
|
||||
{
|
||||
prop.SetAsTimeFrom_FT_Prec(ft, k_PropVar_TimePrec_100ns);
|
||||
}
|
||||
|
||||
inline void PropVariant_SetFrom_FiTime(NWindows::NCOM::CPropVariant &prop, const CFiTime &fts)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
PropVariant_SetFrom_NtfsTime(prop, fts);
|
||||
#else
|
||||
unsigned ns100;
|
||||
FILETIME ft;
|
||||
FiTime_To_FILETIME_ns100(fts, ft, ns100);
|
||||
prop.SetAsTimeFrom_FT_Prec_Ns100(ft, k_PropVar_TimePrec_1ns, ns100);
|
||||
#endif
|
||||
}
|
||||
|
||||
inline bool PropVariant_SetFrom_DosTime(NWindows::NCOM::CPropVariant &prop, UInt32 dosTime)
|
||||
{
|
||||
FILETIME localFileTime, utc;
|
||||
if (!NWindows::NTime::DosTime_To_FileTime(dosTime, localFileTime))
|
||||
return false;
|
||||
if (!LocalFileTimeToFileTime(&localFileTime, &utc))
|
||||
return false;
|
||||
prop.SetAsTimeFrom_FT_Prec(utc, k_PropVar_TimePrec_DOS);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user