247 lines
4.7 KiB
C++
247 lines
4.7 KiB
C++
|
#include "Procs.hxx"
|
||
|
|
||
|
#define BAIL_ON_FAILURE(hr) \
|
||
|
if (FAILED(hr)) { \
|
||
|
goto error; \
|
||
|
}\
|
||
|
|
||
|
#define BAIL_ON_SUCCESS(hr) \
|
||
|
if (SUCCEEDED(hr)) { \
|
||
|
goto error; \
|
||
|
}\
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
NTTimeFormattoDateFormat(
|
||
|
LARGE_INTEGER *NTTimeFormat,
|
||
|
DATE *DateFormat
|
||
|
)
|
||
|
{
|
||
|
*DateFormat = (DATE)0;
|
||
|
RRETURN(S_OK);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
ConvertDWORDtoDATE(
|
||
|
DWORD dwDate,
|
||
|
DATE * pdaDate,
|
||
|
BOOL fIsGMT
|
||
|
)
|
||
|
{
|
||
|
|
||
|
FILETIME fileTime;
|
||
|
SYSTEMTIME SystemTime, LocalTime;
|
||
|
LARGE_INTEGER tmpTime;
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (pdaDate) {
|
||
|
memset(pdaDate, 0, sizeof(DATE));
|
||
|
}
|
||
|
|
||
|
memset(&fileTime, 0, sizeof(FILETIME));
|
||
|
|
||
|
::RtlSecondsSince1970ToTime(dwDate, &tmpTime );
|
||
|
|
||
|
fileTime.dwLowDateTime = tmpTime.LowPart;
|
||
|
fileTime.dwHighDateTime = tmpTime.HighPart;
|
||
|
|
||
|
if(!fIsGMT)
|
||
|
// OLE DB on NDS does not convert to local file time. We don't
|
||
|
// convert here to be consistent.
|
||
|
FileTimeToLocalFileTime(&fileTime, &fileTime);
|
||
|
|
||
|
if (!FileTimeToSystemTime(&fileTime, &SystemTime)) {
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
BAIL_ON_FAILURE(hr);
|
||
|
}
|
||
|
|
||
|
if (!SystemTimeToVariantTime(&SystemTime, pdaDate)) {
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
BAIL_ON_FAILURE(hr);
|
||
|
}
|
||
|
|
||
|
error:
|
||
|
|
||
|
RRETURN(hr);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
ConvertDATEtoDWORD(
|
||
|
DATE daDate,
|
||
|
DWORD *pdwDate,
|
||
|
BOOL fIsGMT
|
||
|
)
|
||
|
{
|
||
|
|
||
|
FILETIME fileTime;
|
||
|
LARGE_INTEGER tmpTime;
|
||
|
HRESULT hr = S_OK;
|
||
|
SYSTEMTIME systemTime;
|
||
|
|
||
|
if (!VariantTimeToSystemTime(daDate, &systemTime)) {
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
BAIL_ON_FAILURE(hr);
|
||
|
}
|
||
|
|
||
|
if (!SystemTimeToFileTime(&systemTime, &fileTime)) {
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
BAIL_ON_FAILURE(hr);
|
||
|
}
|
||
|
|
||
|
if(!fIsGMT)
|
||
|
// OLE DB on NDS does not convert to local file time. We don't
|
||
|
// convert here to be consistent.
|
||
|
LocalFileTimeToFileTime(&fileTime, &fileTime);
|
||
|
|
||
|
tmpTime.LowPart = fileTime.dwLowDateTime;
|
||
|
tmpTime.HighPart = fileTime.dwHighDateTime;
|
||
|
|
||
|
|
||
|
::RtlTimeToSecondsSince1970(&tmpTime, (ULONG *)pdwDate);
|
||
|
|
||
|
error:
|
||
|
RRETURN(hr);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
ConvertDATEToDWORD(
|
||
|
DATE daDate,
|
||
|
DWORD *pdwDate
|
||
|
)
|
||
|
{
|
||
|
RRETURN(S_OK);
|
||
|
}
|
||
|
|
||
|
HRESULT
|
||
|
ConvertSystemTimeToDATE(
|
||
|
SYSTEMTIME Time,
|
||
|
DATE * pdaTime
|
||
|
)
|
||
|
{
|
||
|
FILETIME ft;
|
||
|
BOOL fRetval = FALSE;
|
||
|
USHORT wDosDate;
|
||
|
USHORT wDosTime;
|
||
|
SYSTEMTIME LocalTime;
|
||
|
|
||
|
//
|
||
|
// Get Time-zone specific local time.
|
||
|
//
|
||
|
|
||
|
fRetval = SystemTimeToTzSpecificLocalTime(
|
||
|
NULL,
|
||
|
&Time,
|
||
|
&LocalTime
|
||
|
);
|
||
|
if(!fRetval){
|
||
|
RRETURN(HRESULT_FROM_WIN32(GetLastError()));
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// System Time To File Time.
|
||
|
//
|
||
|
|
||
|
fRetval = SystemTimeToFileTime(&LocalTime,
|
||
|
&ft);
|
||
|
if(!fRetval){
|
||
|
RRETURN(HRESULT_FROM_WIN32(GetLastError()));
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// File Time to DosDateTime.
|
||
|
//
|
||
|
|
||
|
fRetval = FileTimeToDosDateTime(&ft,
|
||
|
&wDosDate,
|
||
|
&wDosTime);
|
||
|
if(!fRetval){
|
||
|
RRETURN(HRESULT_FROM_WIN32(GetLastError()));
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// DosDateTime to VariantTime.
|
||
|
//
|
||
|
|
||
|
fRetval = DosDateTimeToVariantTime(wDosDate,
|
||
|
wDosTime,
|
||
|
pdaTime );
|
||
|
if(!fRetval){
|
||
|
RRETURN(HRESULT_FROM_WIN32(GetLastError()));
|
||
|
}
|
||
|
|
||
|
RRETURN(S_OK);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
ConvertDWORDToDATE(
|
||
|
DWORD dwTime,
|
||
|
DATE * pdaTime
|
||
|
)
|
||
|
|
||
|
{
|
||
|
RRETURN(S_OK);
|
||
|
}
|
||
|
|
||
|
HRESULT
|
||
|
ConvertDATEToSYSTEMTIME(
|
||
|
DATE daDate,
|
||
|
SYSTEMTIME *pSysTime
|
||
|
)
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
FILETIME ft;
|
||
|
FILETIME lft; //local file time
|
||
|
BOOL fRetval = FALSE;
|
||
|
SYSTEMTIME LocalTime;
|
||
|
USHORT wDosDate;
|
||
|
USHORT wDosTime;
|
||
|
|
||
|
fRetval = VariantTimeToDosDateTime(daDate,
|
||
|
&wDosDate,
|
||
|
&wDosTime );
|
||
|
|
||
|
if(!fRetval){
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
RRETURN(hr);
|
||
|
}
|
||
|
|
||
|
fRetval = DosDateTimeToFileTime(wDosDate,
|
||
|
wDosTime,
|
||
|
&lft);
|
||
|
|
||
|
|
||
|
|
||
|
if(!fRetval){
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
RRETURN(hr);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// convert local file time to filetime
|
||
|
//
|
||
|
|
||
|
fRetval = LocalFileTimeToFileTime(&lft,
|
||
|
&ft );
|
||
|
|
||
|
if(!fRetval){
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
RRETURN(hr);
|
||
|
}
|
||
|
|
||
|
fRetval = FileTimeToSystemTime(&ft,
|
||
|
pSysTime );
|
||
|
|
||
|
|
||
|
if(!fRetval){
|
||
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
||
|
RRETURN(hr);
|
||
|
}
|
||
|
|
||
|
RRETURN(S_OK);
|
||
|
}
|