• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // PropVariantConvert.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "../Common/IntToString.h"
6 
7 #include "Defs.h"
8 #include "PropVariantConv.h"
9 
10 #define UINT_TO_STR_2(c, val) { s[0] = (c); s[1] = (char)('0' + (val) / 10); s[2] = (char)('0' + (val) % 10); s += 3; }
11 
ConvertFileTimeToString(const FILETIME & ft,char * s,bool includeTime,bool includeSeconds)12 bool ConvertFileTimeToString(const FILETIME &ft, char *s, bool includeTime, bool includeSeconds) throw()
13 {
14   SYSTEMTIME st;
15   if (!BOOLToBool(FileTimeToSystemTime(&ft, &st)))
16   {
17     *s = 0;
18     return false;
19   }
20   unsigned val = st.wYear;
21   if (val >= 10000)
22   {
23     *s++ = (char)('0' + val / 10000);
24     val %= 10000;
25   }
26   {
27     s[3] = (char)('0' + val % 10); val /= 10;
28     s[2] = (char)('0' + val % 10); val /= 10;
29     s[1] = (char)('0' + val % 10);
30     s[0] = (char)('0' + val / 10);
31     s += 4;
32   }
33   UINT_TO_STR_2('-', st.wMonth);
34   UINT_TO_STR_2('-', st.wDay);
35   if (includeTime)
36   {
37     UINT_TO_STR_2(' ', st.wHour);
38     UINT_TO_STR_2(':', st.wMinute);
39     if (includeSeconds)
40     {
41       UINT_TO_STR_2(':', st.wSecond);
42       /*
43       *s++ = '.';
44       unsigned val = st.wMilliseconds;
45       s[2] = (char)('0' + val % 10); val /= 10;
46       s[1] = (char)('0' + val % 10);
47       s[0] = (char)('0' + val / 10);
48       s += 3;
49       */
50     }
51   }
52   *s = 0;
53   return true;
54 }
55 
ConvertFileTimeToString(const FILETIME & ft,wchar_t * dest,bool includeTime,bool includeSeconds)56 void ConvertFileTimeToString(const FILETIME &ft, wchar_t *dest, bool includeTime, bool includeSeconds) throw()
57 {
58   char s[32];
59   ConvertFileTimeToString(ft, s, includeTime, includeSeconds);
60   for (unsigned i = 0;; i++)
61   {
62     unsigned char c = s[i];
63     dest[i] = c;
64     if (c == 0)
65       return;
66   }
67 }
68 
ConvertPropVariantToShortString(const PROPVARIANT & prop,char * dest)69 void ConvertPropVariantToShortString(const PROPVARIANT &prop, char *dest) throw()
70 {
71   *dest = 0;
72   switch (prop.vt)
73   {
74     case VT_EMPTY: return;
75     case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
76     case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
77     case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
78     case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
79     case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
80     case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
81     // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
82     case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
83     case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
84     case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
85     case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? '+' : '-'; dest[1] = 0; return;
86     default: dest[0] = '?'; dest[1] = ':'; ConvertUInt64ToString(prop.vt, dest + 2);
87   }
88 }
89 
ConvertPropVariantToShortString(const PROPVARIANT & prop,wchar_t * dest)90 void ConvertPropVariantToShortString(const PROPVARIANT &prop, wchar_t *dest) throw()
91 {
92   *dest = 0;
93   switch (prop.vt)
94   {
95     case VT_EMPTY: return;
96     case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
97     case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
98     case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
99     case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
100     case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
101     case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
102     // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
103     case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
104     case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
105     case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
106     case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? (wchar_t)'+' : (wchar_t)'-'; dest[1] = 0; return;
107     default: dest[0] = '?'; dest[1] = ':'; ConvertUInt32ToString(prop.vt, dest + 2);
108   }
109 }
110