mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
106 lines
2.7 KiB
C++
106 lines
2.7 KiB
C++
|
// PropVariantConversions.cpp
|
||
|
|
||
|
#include "StdAfx.h"
|
||
|
|
||
|
#include "Common/IntToString.h"
|
||
|
#include "Common/StringConvert.h"
|
||
|
|
||
|
#include "Windows/Defs.h"
|
||
|
|
||
|
#include "PropVariantConversions.h"
|
||
|
|
||
|
static UString ConvertUInt64ToString(UInt64 value)
|
||
|
{
|
||
|
wchar_t buffer[32];
|
||
|
ConvertUInt64ToString(value, buffer);
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
static UString ConvertInt64ToString(Int64 value)
|
||
|
{
|
||
|
wchar_t buffer[32];
|
||
|
ConvertInt64ToString(value, buffer);
|
||
|
return buffer;
|
||
|
}
|
||
|
|
||
|
static char *UIntToStringSpec(char c, UInt32 value, char *s, int numPos)
|
||
|
{
|
||
|
if (c != 0)
|
||
|
*s++ = c;
|
||
|
char temp[16];
|
||
|
int pos = 0;
|
||
|
do
|
||
|
{
|
||
|
temp[pos++] = (char)('0' + value % 10);
|
||
|
value /= 10;
|
||
|
}
|
||
|
while (value != 0);
|
||
|
int i;
|
||
|
for (i = 0; i < numPos - pos; i++)
|
||
|
*s++ = '0';
|
||
|
do
|
||
|
*s++ = temp[--pos];
|
||
|
while (pos > 0);
|
||
|
*s = '\0';
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime, bool includeSeconds)
|
||
|
{
|
||
|
s[0] = '\0';
|
||
|
SYSTEMTIME st;
|
||
|
if (!BOOLToBool(FileTimeToSystemTime(&ft, &st)))
|
||
|
return false;
|
||
|
s = UIntToStringSpec(0, st.wYear, s, 4);
|
||
|
s = UIntToStringSpec('-', st.wMonth, s, 2);
|
||
|
s = UIntToStringSpec('-', st.wDay, s, 2);
|
||
|
if (includeTime)
|
||
|
{
|
||
|
s = UIntToStringSpec(' ', st.wHour, s, 2);
|
||
|
s = UIntToStringSpec(':', st.wMinute, s, 2);
|
||
|
if (includeSeconds)
|
||
|
UIntToStringSpec(':', st.wSecond, s, 2);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
UString ConvertFileTimeToString(const FILETIME &ft, bool includeTime, bool includeSeconds)
|
||
|
{
|
||
|
char s[32];
|
||
|
ConvertFileTimeToString(ft, s, includeTime, includeSeconds);
|
||
|
return GetUnicodeString(s);
|
||
|
}
|
||
|
|
||
|
|
||
|
UString ConvertPropVariantToString(const PROPVARIANT &prop)
|
||
|
{
|
||
|
switch (prop.vt)
|
||
|
{
|
||
|
case VT_EMPTY: return UString();
|
||
|
case VT_BSTR: return prop.bstrVal;
|
||
|
case VT_UI1: return ConvertUInt64ToString(prop.bVal);
|
||
|
case VT_UI2: return ConvertUInt64ToString(prop.uiVal);
|
||
|
case VT_UI4: return ConvertUInt64ToString(prop.ulVal);
|
||
|
case VT_UI8: return ConvertUInt64ToString(prop.uhVal.QuadPart);
|
||
|
case VT_FILETIME: return ConvertFileTimeToString(prop.filetime, true, true);
|
||
|
// case VT_I1: return ConvertInt64ToString(prop.cVal);
|
||
|
case VT_I2: return ConvertInt64ToString(prop.iVal);
|
||
|
case VT_I4: return ConvertInt64ToString(prop.lVal);
|
||
|
case VT_I8: return ConvertInt64ToString(prop.hVal.QuadPart);
|
||
|
case VT_BOOL: return VARIANT_BOOLToBool(prop.boolVal) ? L"+" : L"-";
|
||
|
default: throw 150245;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
UInt64 ConvertPropVariantToUInt64(const PROPVARIANT &prop)
|
||
|
{
|
||
|
switch (prop.vt)
|
||
|
{
|
||
|
case VT_UI1: return prop.bVal;
|
||
|
case VT_UI2: return prop.uiVal;
|
||
|
case VT_UI4: return prop.ulVal;
|
||
|
case VT_UI8: return (UInt64)prop.uhVal.QuadPart;
|
||
|
default: throw 151199;
|
||
|
}
|
||
|
}
|