Home | History | Annotate | Download | only in Windows
      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 
     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       UINT_TO_STR_2(':', st.wSecond);
     41   }
     42   *s = 0;
     43   return true;
     44 }
     45 
     46 void ConvertFileTimeToString(const FILETIME &ft, wchar_t *dest, bool includeTime, bool includeSeconds) throw()
     47 {
     48   char s[32];
     49   ConvertFileTimeToString(ft, s, includeTime, includeSeconds);
     50   for (unsigned i = 0;; i++)
     51   {
     52     unsigned char c = s[i];
     53     dest[i] = c;
     54     if (c == 0)
     55       return;
     56   }
     57 }
     58 
     59 void ConvertPropVariantToShortString(const PROPVARIANT &prop, char *dest) throw()
     60 {
     61   *dest = 0;
     62   switch (prop.vt)
     63   {
     64     case VT_EMPTY: return;
     65     case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
     66     case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
     67     case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
     68     case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
     69     case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
     70     case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
     71     // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
     72     case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
     73     case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
     74     case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
     75     case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? '+' : '-'; dest[1] = 0; return;
     76     default: dest[0] = '?'; dest[1] = ':'; ConvertUInt64ToString(prop.vt, dest + 2);
     77   }
     78 }
     79 
     80 void ConvertPropVariantToShortString(const PROPVARIANT &prop, wchar_t *dest) throw()
     81 {
     82   *dest = 0;
     83   switch (prop.vt)
     84   {
     85     case VT_EMPTY: return;
     86     case VT_BSTR: dest[0] = '?'; dest[1] = 0; return;
     87     case VT_UI1: ConvertUInt32ToString(prop.bVal, dest); return;
     88     case VT_UI2: ConvertUInt32ToString(prop.uiVal, dest); return;
     89     case VT_UI4: ConvertUInt32ToString(prop.ulVal, dest); return;
     90     case VT_UI8: ConvertUInt64ToString(prop.uhVal.QuadPart, dest); return;
     91     case VT_FILETIME: ConvertFileTimeToString(prop.filetime, dest, true, true); return;
     92     // case VT_I1: return ConvertInt64ToString(prop.cVal, dest); return;
     93     case VT_I2: ConvertInt64ToString(prop.iVal, dest); return;
     94     case VT_I4: ConvertInt64ToString(prop.lVal, dest); return;
     95     case VT_I8: ConvertInt64ToString(prop.hVal.QuadPart, dest); return;
     96     case VT_BOOL: dest[0] = VARIANT_BOOLToBool(prop.boolVal) ? '+' : '-'; dest[1] = 0; return;
     97     default: dest[0] = '?'; dest[1] = ':'; ConvertUInt32ToString(prop.vt, dest + 2);
     98   }
     99 }
    100