[PSDK] Update wincodecsdk.idl. CORE-13362
[reactos.git] / reactos / dll / win32 / windowscodecs / metadatahandler.c
index 7adcba0..73825a0 100644 (file)
@@ -20,7 +20,8 @@
 #include "wincodecs_private.h"
 
 #include <stdio.h>
-#include <winternl.h>
+#include <wine/winternl.h>
+#include <propvarutil.h>
 
 typedef struct MetadataHandler {
     IWICMetadataWriter IWICMetadataWriter_iface;
@@ -197,43 +198,6 @@ static HRESULT WINAPI MetadataHandler_GetValueByIndex(IWICMetadataWriter *iface,
     return hr;
 }
 
-static BOOL get_int_value(const PROPVARIANT *pv, LONGLONG *value)
-{
-    switch (pv->vt)
-    {
-    case VT_NULL:
-    case VT_EMPTY:
-        *value = 0;
-        break;
-    case VT_I1:
-        *value = pv->u.cVal;
-        break;
-    case VT_UI1:
-        *value = pv->u.bVal;
-        break;
-    case VT_I2:
-        *value = pv->u.iVal;
-        break;
-    case VT_UI2:
-        *value = pv->u.uiVal;
-        break;
-    case VT_I4:
-        *value = pv->u.lVal;
-        break;
-    case VT_UI4:
-        *value = pv->u.ulVal;
-        break;
-    case VT_I8:
-    case VT_UI8:
-        *value = pv->u.hVal.QuadPart;
-        break;
-    default:
-        FIXME("not supported variant type %d\n", pv->vt);
-        return FALSE;
-    }
-    return TRUE;
-}
-
 /* FiXME: Use propsys.PropVariantCompareEx once it's implemented */
 static int propvar_cmp(const PROPVARIANT *v1, const PROPVARIANT *v2)
 {
@@ -249,8 +213,8 @@ static int propvar_cmp(const PROPVARIANT *v1, const PROPVARIANT *v2)
         return lstrcmpiW(v1->u.pwszVal, v2->u.pwszVal);
     }
 
-    if (!get_int_value(v1, &value1)) return -1;
-    if (!get_int_value(v2, &value2)) return -1;
+    if (PropVariantToInt64(v1, &value1) != S_OK) return -1;
+    if (PropVariantToInt64(v2, &value2) != S_OK) return -1;
 
     value1 -= value2;
     if (value1) return value1 < 0 ? -1 : 1;
@@ -376,7 +340,7 @@ static HRESULT WINAPI MetadataHandler_Load(IWICPersistStream *iface,
 {
     MetadataHandler *This = impl_from_IWICPersistStream(iface);
     TRACE("(%p,%p)\n", iface, pStm);
-    return IWICPersistStream_LoadEx(&This->IWICPersistStream_iface, pStm, NULL, WICPersistOptionsDefault);
+    return IWICPersistStream_LoadEx(&This->IWICPersistStream_iface, pStm, NULL, WICPersistOptionDefault);
 }
 
 static HRESULT WINAPI MetadataHandler_Save(IWICPersistStream *iface,
@@ -763,7 +727,7 @@ static int tag_to_vt(SHORT tag)
 static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
                               MetadataItem *item, BOOL native_byte_order)
 {
-    ULONG count, value, i, bytesread;
+    ULONG count, value, i;
     SHORT type;
     LARGE_INTEGER pos;
     HRESULT hr;
@@ -805,7 +769,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
 
         item->value.vt |= VT_VECTOR;
         item->value.u.caub.cElems = count;
-        item->value.u.caub.pElems = HeapAlloc(GetProcessHeap(), 0, count);
+        item->value.u.caub.pElems = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count);
         if (!item->value.u.caub.pElems) return E_OUTOFMEMORY;
 
         pos.QuadPart = value;
@@ -815,9 +779,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             HeapFree(GetProcessHeap(), 0, item->value.u.caub.pElems);
             return hr;
         }
-        hr = IStream_Read(input, item->value.u.caub.pElems, count, &bytesread);
-        if (bytesread != count) hr = E_FAIL;
-        if (hr != S_OK)
+        hr = IStream_Read(input, item->value.u.caub.pElems, count, NULL);
+        if (FAILED(hr))
         {
             HeapFree(GetProcessHeap(), 0, item->value.u.caub.pElems);
             return hr;
@@ -850,7 +813,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
 
         item->value.vt |= VT_VECTOR;
         item->value.u.caui.cElems = count;
-        item->value.u.caui.pElems = HeapAlloc(GetProcessHeap(), 0, count * 2);
+        item->value.u.caui.pElems = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count * 2);
         if (!item->value.u.caui.pElems) return E_OUTOFMEMORY;
 
         pos.QuadPart = value;
@@ -860,9 +823,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             HeapFree(GetProcessHeap(), 0, item->value.u.caui.pElems);
             return hr;
         }
-        hr = IStream_Read(input, item->value.u.caui.pElems, count * 2, &bytesread);
-        if (bytesread != count * 2) hr = E_FAIL;
-        if (hr != S_OK)
+        hr = IStream_Read(input, item->value.u.caui.pElems, count * 2, NULL);
+        if (FAILED(hr))
         {
             HeapFree(GetProcessHeap(), 0, item->value.u.caui.pElems);
             return hr;
@@ -883,7 +845,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
 
         item->value.vt |= VT_VECTOR;
         item->value.u.caul.cElems = count;
-        item->value.u.caul.pElems = HeapAlloc(GetProcessHeap(), 0, count * 4);
+        item->value.u.caul.pElems = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count * 4);
         if (!item->value.u.caul.pElems) return E_OUTOFMEMORY;
 
         pos.QuadPart = value;
@@ -893,9 +855,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             HeapFree(GetProcessHeap(), 0, item->value.u.caul.pElems);
             return hr;
         }
-        hr = IStream_Read(input, item->value.u.caul.pElems, count * 4, &bytesread);
-        if (bytesread != count * 4) hr = E_FAIL;
-        if (hr != S_OK)
+        hr = IStream_Read(input, item->value.u.caul.pElems, count * 4, NULL);
+        if (FAILED(hr))
         {
             HeapFree(GetProcessHeap(), 0, item->value.u.caul.pElems);
             return hr;
@@ -921,8 +882,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             hr = IStream_Seek(input, pos, SEEK_SET, NULL);
             if (FAILED(hr)) return hr;
 
-            hr = IStream_Read(input, &ull, sizeof(ull), &bytesread);
-            if (bytesread != sizeof(ull)) hr = E_FAIL;
+            hr = IStream_Read(input, &ull, sizeof(ull), NULL);
             if (hr != S_OK) return hr;
 
             item->value.u.uhVal.QuadPart = ull;
@@ -940,7 +900,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
         {
             item->value.vt |= VT_VECTOR;
             item->value.u.cauh.cElems = count;
-            item->value.u.cauh.pElems = HeapAlloc(GetProcessHeap(), 0, count * 8);
+            item->value.u.cauh.pElems = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count * 8);
             if (!item->value.u.cauh.pElems) return E_OUTOFMEMORY;
 
             pos.QuadPart = value;
@@ -950,9 +910,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
                 HeapFree(GetProcessHeap(), 0, item->value.u.cauh.pElems);
                 return hr;
             }
-            hr = IStream_Read(input, item->value.u.cauh.pElems, count * 8, &bytesread);
-            if (bytesread != count * 8) hr = E_FAIL;
-            if (hr != S_OK)
+            hr = IStream_Read(input, item->value.u.cauh.pElems, count * 8, NULL);
+            if (FAILED(hr))
             {
                 HeapFree(GetProcessHeap(), 0, item->value.u.cauh.pElems);
                 return hr;
@@ -970,7 +929,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
         }
         break;
     case IFD_ASCII:
-        item->value.u.pszVal = HeapAlloc(GetProcessHeap(), 0, count + 1);
+        item->value.u.pszVal = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count + 1);
         if (!item->value.u.pszVal) return E_OUTOFMEMORY;
 
         if (count <= 4)
@@ -988,9 +947,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             HeapFree(GetProcessHeap(), 0, item->value.u.pszVal);
             return hr;
         }
-        hr = IStream_Read(input, item->value.u.pszVal, count, &bytesread);
-        if (bytesread != count) hr = E_FAIL;
-        if (hr != S_OK)
+        hr = IStream_Read(input, item->value.u.pszVal, count, NULL);
+        if (FAILED(hr))
         {
             HeapFree(GetProcessHeap(), 0, item->value.u.pszVal);
             return hr;
@@ -1005,7 +963,7 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             break;
         }
 
-        item->value.u.blob.pBlobData = HeapAlloc(GetProcessHeap(), 0, count);
+        item->value.u.blob.pBlobData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count);
         if (!item->value.u.blob.pBlobData) return E_OUTOFMEMORY;
 
         item->value.u.blob.cbSize = count;
@@ -1024,9 +982,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
             HeapFree(GetProcessHeap(), 0, item->value.u.blob.pBlobData);
             return hr;
         }
-        hr = IStream_Read(input, item->value.u.blob.pBlobData, count, &bytesread);
-        if (bytesread != count) hr = E_FAIL;
-        if (hr != S_OK)
+        hr = IStream_Read(input, item->value.u.blob.pBlobData, count, NULL);
+        if (FAILED(hr))
         {
             HeapFree(GetProcessHeap(), 0, item->value.u.blob.pBlobData);
             return hr;
@@ -1052,9 +1009,9 @@ static HRESULT LoadIfdMetadata(IStream *input, const GUID *preferred_vendor,
     TRACE("\n");
 
 #ifdef WORDS_BIGENDIAN
-    if (persist_options & WICPersistOptionsLittleEndian)
+    if (persist_options & WICPersistOptionLittleEndian)
 #else
-    if (persist_options & WICPersistOptionsBigEndian)
+    if (persist_options & WICPersistOptionBigEndian)
 #endif
         native_byte_order = FALSE;