windowscodecs: Use nameless unions.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Esme Povirk <esme@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
36cec2c7df
commit
909b2ced71
|
@ -3,7 +3,6 @@ IMPORTLIB = windowscodecs
|
|||
IMPORTS = windowscodecs uuid ole32 oleaut32 propsys rpcrt4 shlwapi user32 gdi32 advapi32
|
||||
EXTRAINCL = $(JPEG_CFLAGS) $(PNG_CFLAGS) $(TIFF_CFLAGS)
|
||||
EXTRALIBS = $(APPLICATIONSERVICES_LIBS)
|
||||
EXTRADEFS = -DWINE_NO_NAMELESS_EXTENSION
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
|
|
|
@ -101,51 +101,51 @@ static HRESULT load_LSD_metadata(IStream *stream, const GUID *vendor, DWORD opti
|
|||
}
|
||||
|
||||
result[0].id.vt = VT_LPWSTR;
|
||||
result[0].id.u.pwszVal = strdupAtoW("Signature");
|
||||
result[0].id.pwszVal = strdupAtoW("Signature");
|
||||
result[0].value.vt = VT_UI1|VT_VECTOR;
|
||||
result[0].value.u.caub.cElems = sizeof(lsd_data.signature);
|
||||
result[0].value.u.caub.pElems = HeapAlloc(GetProcessHeap(), 0, sizeof(lsd_data.signature));
|
||||
memcpy(result[0].value.u.caub.pElems, lsd_data.signature, sizeof(lsd_data.signature));
|
||||
result[0].value.caub.cElems = sizeof(lsd_data.signature);
|
||||
result[0].value.caub.pElems = HeapAlloc(GetProcessHeap(), 0, sizeof(lsd_data.signature));
|
||||
memcpy(result[0].value.caub.pElems, lsd_data.signature, sizeof(lsd_data.signature));
|
||||
|
||||
result[1].id.vt = VT_LPWSTR;
|
||||
result[1].id.u.pwszVal = strdupAtoW("Width");
|
||||
result[1].id.pwszVal = strdupAtoW("Width");
|
||||
result[1].value.vt = VT_UI2;
|
||||
result[1].value.u.uiVal = lsd_data.width;
|
||||
result[1].value.uiVal = lsd_data.width;
|
||||
|
||||
result[2].id.vt = VT_LPWSTR;
|
||||
result[2].id.u.pwszVal = strdupAtoW("Height");
|
||||
result[2].id.pwszVal = strdupAtoW("Height");
|
||||
result[2].value.vt = VT_UI2;
|
||||
result[2].value.u.uiVal = lsd_data.height;
|
||||
result[2].value.uiVal = lsd_data.height;
|
||||
|
||||
result[3].id.vt = VT_LPWSTR;
|
||||
result[3].id.u.pwszVal = strdupAtoW("GlobalColorTableFlag");
|
||||
result[3].id.pwszVal = strdupAtoW("GlobalColorTableFlag");
|
||||
result[3].value.vt = VT_BOOL;
|
||||
result[3].value.u.boolVal = (lsd_data.packed >> 7) & 1;
|
||||
result[3].value.boolVal = (lsd_data.packed >> 7) & 1;
|
||||
|
||||
result[4].id.vt = VT_LPWSTR;
|
||||
result[4].id.u.pwszVal = strdupAtoW("ColorResolution");
|
||||
result[4].id.pwszVal = strdupAtoW("ColorResolution");
|
||||
result[4].value.vt = VT_UI1;
|
||||
result[4].value.u.bVal = (lsd_data.packed >> 4) & 7;
|
||||
result[4].value.bVal = (lsd_data.packed >> 4) & 7;
|
||||
|
||||
result[5].id.vt = VT_LPWSTR;
|
||||
result[5].id.u.pwszVal = strdupAtoW("SortFlag");
|
||||
result[5].id.pwszVal = strdupAtoW("SortFlag");
|
||||
result[5].value.vt = VT_BOOL;
|
||||
result[5].value.u.boolVal = (lsd_data.packed >> 3) & 1;
|
||||
result[5].value.boolVal = (lsd_data.packed >> 3) & 1;
|
||||
|
||||
result[6].id.vt = VT_LPWSTR;
|
||||
result[6].id.u.pwszVal = strdupAtoW("GlobalColorTableSize");
|
||||
result[6].id.pwszVal = strdupAtoW("GlobalColorTableSize");
|
||||
result[6].value.vt = VT_UI1;
|
||||
result[6].value.u.bVal = lsd_data.packed & 7;
|
||||
result[6].value.bVal = lsd_data.packed & 7;
|
||||
|
||||
result[7].id.vt = VT_LPWSTR;
|
||||
result[7].id.u.pwszVal = strdupAtoW("BackgroundColorIndex");
|
||||
result[7].id.pwszVal = strdupAtoW("BackgroundColorIndex");
|
||||
result[7].value.vt = VT_UI1;
|
||||
result[7].value.u.bVal = lsd_data.background_color_index;
|
||||
result[7].value.bVal = lsd_data.background_color_index;
|
||||
|
||||
result[8].id.vt = VT_LPWSTR;
|
||||
result[8].id.u.pwszVal = strdupAtoW("PixelAspectRatio");
|
||||
result[8].id.pwszVal = strdupAtoW("PixelAspectRatio");
|
||||
result[8].value.vt = VT_UI1;
|
||||
result[8].value.u.bVal = lsd_data.pixel_aspect_ratio;
|
||||
result[8].value.bVal = lsd_data.pixel_aspect_ratio;
|
||||
|
||||
*items = result;
|
||||
*count = 9;
|
||||
|
@ -189,44 +189,44 @@ static HRESULT load_IMD_metadata(IStream *stream, const GUID *vendor, DWORD opti
|
|||
}
|
||||
|
||||
result[0].id.vt = VT_LPWSTR;
|
||||
result[0].id.u.pwszVal = strdupAtoW("Left");
|
||||
result[0].id.pwszVal = strdupAtoW("Left");
|
||||
result[0].value.vt = VT_UI2;
|
||||
result[0].value.u.uiVal = imd_data.left;
|
||||
result[0].value.uiVal = imd_data.left;
|
||||
|
||||
result[1].id.vt = VT_LPWSTR;
|
||||
result[1].id.u.pwszVal = strdupAtoW("Top");
|
||||
result[1].id.pwszVal = strdupAtoW("Top");
|
||||
result[1].value.vt = VT_UI2;
|
||||
result[1].value.u.uiVal = imd_data.top;
|
||||
result[1].value.uiVal = imd_data.top;
|
||||
|
||||
result[2].id.vt = VT_LPWSTR;
|
||||
result[2].id.u.pwszVal = strdupAtoW("Width");
|
||||
result[2].id.pwszVal = strdupAtoW("Width");
|
||||
result[2].value.vt = VT_UI2;
|
||||
result[2].value.u.uiVal = imd_data.width;
|
||||
result[2].value.uiVal = imd_data.width;
|
||||
|
||||
result[3].id.vt = VT_LPWSTR;
|
||||
result[3].id.u.pwszVal = strdupAtoW("Height");
|
||||
result[3].id.pwszVal = strdupAtoW("Height");
|
||||
result[3].value.vt = VT_UI2;
|
||||
result[3].value.u.uiVal = imd_data.height;
|
||||
result[3].value.uiVal = imd_data.height;
|
||||
|
||||
result[4].id.vt = VT_LPWSTR;
|
||||
result[4].id.u.pwszVal = strdupAtoW("LocalColorTableFlag");
|
||||
result[4].id.pwszVal = strdupAtoW("LocalColorTableFlag");
|
||||
result[4].value.vt = VT_BOOL;
|
||||
result[4].value.u.boolVal = (imd_data.packed >> 7) & 1;
|
||||
result[4].value.boolVal = (imd_data.packed >> 7) & 1;
|
||||
|
||||
result[5].id.vt = VT_LPWSTR;
|
||||
result[5].id.u.pwszVal = strdupAtoW("InterlaceFlag");
|
||||
result[5].id.pwszVal = strdupAtoW("InterlaceFlag");
|
||||
result[5].value.vt = VT_BOOL;
|
||||
result[5].value.u.boolVal = (imd_data.packed >> 6) & 1;
|
||||
result[5].value.boolVal = (imd_data.packed >> 6) & 1;
|
||||
|
||||
result[6].id.vt = VT_LPWSTR;
|
||||
result[6].id.u.pwszVal = strdupAtoW("SortFlag");
|
||||
result[6].id.pwszVal = strdupAtoW("SortFlag");
|
||||
result[6].value.vt = VT_BOOL;
|
||||
result[6].value.u.boolVal = (imd_data.packed >> 5) & 1;
|
||||
result[6].value.boolVal = (imd_data.packed >> 5) & 1;
|
||||
|
||||
result[7].id.vt = VT_LPWSTR;
|
||||
result[7].id.u.pwszVal = strdupAtoW("LocalColorTableSize");
|
||||
result[7].id.pwszVal = strdupAtoW("LocalColorTableSize");
|
||||
result[7].value.vt = VT_UI1;
|
||||
result[7].value.u.bVal = imd_data.packed & 7;
|
||||
result[7].value.bVal = imd_data.packed & 7;
|
||||
|
||||
*items = result;
|
||||
*count = 8;
|
||||
|
@ -282,29 +282,29 @@ static HRESULT load_GCE_metadata(IStream *stream, const GUID *vendor, DWORD opti
|
|||
}
|
||||
|
||||
result[0].id.vt = VT_LPWSTR;
|
||||
result[0].id.u.pwszVal = strdupAtoW("Disposal");
|
||||
result[0].id.pwszVal = strdupAtoW("Disposal");
|
||||
result[0].value.vt = VT_UI1;
|
||||
result[0].value.u.bVal = (gce_data.packed >> 2) & 7;
|
||||
result[0].value.bVal = (gce_data.packed >> 2) & 7;
|
||||
|
||||
result[1].id.vt = VT_LPWSTR;
|
||||
result[1].id.u.pwszVal = strdupAtoW("UserInputFlag");
|
||||
result[1].id.pwszVal = strdupAtoW("UserInputFlag");
|
||||
result[1].value.vt = VT_BOOL;
|
||||
result[1].value.u.boolVal = (gce_data.packed >> 1) & 1;
|
||||
result[1].value.boolVal = (gce_data.packed >> 1) & 1;
|
||||
|
||||
result[2].id.vt = VT_LPWSTR;
|
||||
result[2].id.u.pwszVal = strdupAtoW("TransparencyFlag");
|
||||
result[2].id.pwszVal = strdupAtoW("TransparencyFlag");
|
||||
result[2].value.vt = VT_BOOL;
|
||||
result[2].value.u.boolVal = gce_data.packed & 1;
|
||||
result[2].value.boolVal = gce_data.packed & 1;
|
||||
|
||||
result[3].id.vt = VT_LPWSTR;
|
||||
result[3].id.u.pwszVal = strdupAtoW("Delay");
|
||||
result[3].id.pwszVal = strdupAtoW("Delay");
|
||||
result[3].value.vt = VT_UI2;
|
||||
result[3].value.u.uiVal = gce_data.delay;
|
||||
result[3].value.uiVal = gce_data.delay;
|
||||
|
||||
result[4].id.vt = VT_LPWSTR;
|
||||
result[4].id.u.pwszVal = strdupAtoW("TransparentColorIndex");
|
||||
result[4].id.pwszVal = strdupAtoW("TransparentColorIndex");
|
||||
result[4].value.vt = VT_UI1;
|
||||
result[4].value.u.bVal = gce_data.transparent_color_index;
|
||||
result[4].value.bVal = gce_data.transparent_color_index;
|
||||
|
||||
*items = result;
|
||||
*count = 5;
|
||||
|
@ -401,17 +401,17 @@ static HRESULT load_APE_metadata(IStream *stream, const GUID *vendor, DWORD opti
|
|||
}
|
||||
|
||||
result[0].id.vt = VT_LPWSTR;
|
||||
result[0].id.u.pwszVal = strdupAtoW("Application");
|
||||
result[0].id.pwszVal = strdupAtoW("Application");
|
||||
result[0].value.vt = VT_UI1|VT_VECTOR;
|
||||
result[0].value.u.caub.cElems = sizeof(ape_data.application);
|
||||
result[0].value.u.caub.pElems = HeapAlloc(GetProcessHeap(), 0, sizeof(ape_data.application));
|
||||
memcpy(result[0].value.u.caub.pElems, ape_data.application, sizeof(ape_data.application));
|
||||
result[0].value.caub.cElems = sizeof(ape_data.application);
|
||||
result[0].value.caub.pElems = HeapAlloc(GetProcessHeap(), 0, sizeof(ape_data.application));
|
||||
memcpy(result[0].value.caub.pElems, ape_data.application, sizeof(ape_data.application));
|
||||
|
||||
result[1].id.vt = VT_LPWSTR;
|
||||
result[1].id.u.pwszVal = strdupAtoW("Data");
|
||||
result[1].id.pwszVal = strdupAtoW("Data");
|
||||
result[1].value.vt = VT_UI1|VT_VECTOR;
|
||||
result[1].value.u.caub.cElems = data_size;
|
||||
result[1].value.u.caub.pElems = data;
|
||||
result[1].value.caub.cElems = data_size;
|
||||
result[1].value.caub.pElems = data;
|
||||
|
||||
*items = result;
|
||||
*count = 2;
|
||||
|
@ -503,9 +503,9 @@ static HRESULT load_GifComment_metadata(IStream *stream, const GUID *vendor, DWO
|
|||
PropVariantInit(&result->value);
|
||||
|
||||
result->id.vt = VT_LPWSTR;
|
||||
result->id.u.pwszVal = strdupAtoW("TextEntry");
|
||||
result->id.pwszVal = strdupAtoW("TextEntry");
|
||||
result->value.vt = VT_LPSTR;
|
||||
result->value.u.pszVal = data;
|
||||
result->value.pszVal = data;
|
||||
|
||||
*items = result;
|
||||
*count = 1;
|
||||
|
|
|
@ -645,8 +645,8 @@ static HRESULT LoadUnknownMetadata(IStream *input, const GUID *preferred_vendor,
|
|||
PropVariantInit(&result[0].value);
|
||||
|
||||
result[0].value.vt = VT_BLOB;
|
||||
result[0].value.u.blob.cbSize = bytesread;
|
||||
result[0].value.u.blob.pBlobData = data;
|
||||
result[0].value.blob.cbSize = bytesread;
|
||||
result[0].value.blob.pBlobData = data;
|
||||
|
||||
*items = result;
|
||||
*item_count = 1;
|
||||
|
@ -723,8 +723,8 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
|
||||
item->schema.vt = VT_EMPTY;
|
||||
item->id.vt = VT_UI2;
|
||||
item->id.u.uiVal = entry->id;
|
||||
SWAP_USHORT(item->id.u.uiVal);
|
||||
item->id.uiVal = entry->id;
|
||||
SWAP_USHORT(item->id.uiVal);
|
||||
|
||||
count = entry->count;
|
||||
SWAP_ULONG(count);
|
||||
|
@ -745,34 +745,34 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
const BYTE *data = (const BYTE *)&entry->value;
|
||||
|
||||
if (count == 1)
|
||||
item->value.u.bVal = data[0];
|
||||
item->value.bVal = data[0];
|
||||
else
|
||||
{
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.caub.cElems = count;
|
||||
item->value.u.caub.pElems = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
memcpy(item->value.u.caub.pElems, data, count);
|
||||
item->value.caub.cElems = count;
|
||||
item->value.caub.pElems = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
memcpy(item->value.caub.pElems, data, count);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.caub.cElems = count;
|
||||
item->value.u.caub.pElems = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
if (!item->value.u.caub.pElems) return E_OUTOFMEMORY;
|
||||
item->value.caub.cElems = count;
|
||||
item->value.caub.pElems = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
if (!item->value.caub.pElems) return E_OUTOFMEMORY;
|
||||
|
||||
pos.QuadPart = value;
|
||||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caub.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caub.pElems);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.caub.pElems, count, &bytesread);
|
||||
hr = IStream_Read(input, item->value.caub.pElems, count, &bytesread);
|
||||
if (bytesread != count) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caub.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caub.pElems);
|
||||
return hr;
|
||||
}
|
||||
break;
|
||||
|
@ -786,42 +786,42 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
|
||||
if (count == 1)
|
||||
{
|
||||
item->value.u.uiVal = data[0];
|
||||
SWAP_USHORT(item->value.u.uiVal);
|
||||
item->value.uiVal = data[0];
|
||||
SWAP_USHORT(item->value.uiVal);
|
||||
}
|
||||
else
|
||||
{
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.caui.cElems = count;
|
||||
item->value.u.caui.pElems = HeapAlloc(GetProcessHeap(), 0, count * 2);
|
||||
memcpy(item->value.u.caui.pElems, data, count * 2);
|
||||
item->value.caui.cElems = count;
|
||||
item->value.caui.pElems = HeapAlloc(GetProcessHeap(), 0, count * 2);
|
||||
memcpy(item->value.caui.pElems, data, count * 2);
|
||||
for (i = 0; i < count; i++)
|
||||
SWAP_USHORT(item->value.u.caui.pElems[i]);
|
||||
SWAP_USHORT(item->value.caui.pElems[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.caui.cElems = count;
|
||||
item->value.u.caui.pElems = HeapAlloc(GetProcessHeap(), 0, count * 2);
|
||||
if (!item->value.u.caui.pElems) return E_OUTOFMEMORY;
|
||||
item->value.caui.cElems = count;
|
||||
item->value.caui.pElems = HeapAlloc(GetProcessHeap(), 0, count * 2);
|
||||
if (!item->value.caui.pElems) return E_OUTOFMEMORY;
|
||||
|
||||
pos.QuadPart = value;
|
||||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caui.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caui.pElems);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.caui.pElems, count * 2, &bytesread);
|
||||
hr = IStream_Read(input, item->value.caui.pElems, count * 2, &bytesread);
|
||||
if (bytesread != count * 2) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caui.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caui.pElems);
|
||||
return hr;
|
||||
}
|
||||
for (i = 0; i < count; i++)
|
||||
SWAP_USHORT(item->value.u.caui.pElems[i]);
|
||||
SWAP_USHORT(item->value.caui.pElems[i]);
|
||||
break;
|
||||
case IFD_LONG:
|
||||
case IFD_SLONG:
|
||||
|
@ -830,31 +830,31 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
|
||||
if (count == 1)
|
||||
{
|
||||
item->value.u.ulVal = value;
|
||||
item->value.ulVal = value;
|
||||
break;
|
||||
}
|
||||
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.caul.cElems = count;
|
||||
item->value.u.caul.pElems = HeapAlloc(GetProcessHeap(), 0, count * 4);
|
||||
if (!item->value.u.caul.pElems) return E_OUTOFMEMORY;
|
||||
item->value.caul.cElems = count;
|
||||
item->value.caul.pElems = HeapAlloc(GetProcessHeap(), 0, count * 4);
|
||||
if (!item->value.caul.pElems) return E_OUTOFMEMORY;
|
||||
|
||||
pos.QuadPart = value;
|
||||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caul.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caul.pElems);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.caul.pElems, count * 4, &bytesread);
|
||||
hr = IStream_Read(input, item->value.caul.pElems, count * 4, &bytesread);
|
||||
if (bytesread != count * 4) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.caul.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.caul.pElems);
|
||||
return hr;
|
||||
}
|
||||
for (i = 0; i < count; i++)
|
||||
SWAP_ULONG(item->value.u.caul.pElems[i]);
|
||||
SWAP_ULONG(item->value.caul.pElems[i]);
|
||||
break;
|
||||
case IFD_RATIONAL:
|
||||
case IFD_SRATIONAL:
|
||||
|
@ -878,59 +878,59 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
if (bytesread != sizeof(ull)) hr = E_FAIL;
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
item->value.u.uhVal.QuadPart = ull;
|
||||
item->value.uhVal.QuadPart = ull;
|
||||
|
||||
if (type == IFD_DOUBLE)
|
||||
SWAP_ULONGLONG(item->value.u.uhVal.QuadPart);
|
||||
SWAP_ULONGLONG(item->value.uhVal.QuadPart);
|
||||
else
|
||||
{
|
||||
SWAP_ULONG(item->value.u.uhVal.u.LowPart);
|
||||
SWAP_ULONG(item->value.u.uhVal.u.HighPart);
|
||||
SWAP_ULONG(item->value.uhVal.LowPart);
|
||||
SWAP_ULONG(item->value.uhVal.HighPart);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
item->value.vt |= VT_VECTOR;
|
||||
item->value.u.cauh.cElems = count;
|
||||
item->value.u.cauh.pElems = HeapAlloc(GetProcessHeap(), 0, count * 8);
|
||||
if (!item->value.u.cauh.pElems) return E_OUTOFMEMORY;
|
||||
item->value.cauh.cElems = count;
|
||||
item->value.cauh.pElems = HeapAlloc(GetProcessHeap(), 0, count * 8);
|
||||
if (!item->value.cauh.pElems) return E_OUTOFMEMORY;
|
||||
|
||||
pos.QuadPart = value;
|
||||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.cauh.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.cauh.pElems);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.cauh.pElems, count * 8, &bytesread);
|
||||
hr = IStream_Read(input, item->value.cauh.pElems, count * 8, &bytesread);
|
||||
if (bytesread != count * 8) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.cauh.pElems);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.cauh.pElems);
|
||||
return hr;
|
||||
}
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if (type == IFD_DOUBLE)
|
||||
SWAP_ULONGLONG(item->value.u.cauh.pElems[i].QuadPart);
|
||||
SWAP_ULONGLONG(item->value.cauh.pElems[i].QuadPart);
|
||||
else
|
||||
{
|
||||
SWAP_ULONG(item->value.u.cauh.pElems[i].u.LowPart);
|
||||
SWAP_ULONG(item->value.u.cauh.pElems[i].u.HighPart);
|
||||
SWAP_ULONG(item->value.cauh.pElems[i].LowPart);
|
||||
SWAP_ULONG(item->value.cauh.pElems[i].HighPart);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IFD_ASCII:
|
||||
item->value.u.pszVal = HeapAlloc(GetProcessHeap(), 0, count + 1);
|
||||
if (!item->value.u.pszVal) return E_OUTOFMEMORY;
|
||||
item->value.pszVal = HeapAlloc(GetProcessHeap(), 0, count + 1);
|
||||
if (!item->value.pszVal) return E_OUTOFMEMORY;
|
||||
|
||||
if (count <= 4)
|
||||
{
|
||||
const char *data = (const char *)&entry->value;
|
||||
memcpy(item->value.u.pszVal, data, count);
|
||||
item->value.u.pszVal[count] = 0;
|
||||
memcpy(item->value.pszVal, data, count);
|
||||
item->value.pszVal[count] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -938,17 +938,17 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.pszVal);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.pszVal);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.pszVal, count, &bytesread);
|
||||
hr = IStream_Read(input, item->value.pszVal, count, &bytesread);
|
||||
if (bytesread != count) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.pszVal);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.pszVal);
|
||||
return hr;
|
||||
}
|
||||
item->value.u.pszVal[count] = 0;
|
||||
item->value.pszVal[count] = 0;
|
||||
break;
|
||||
case IFD_UNDEFINED:
|
||||
if (!count)
|
||||
|
@ -958,15 +958,15 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
break;
|
||||
}
|
||||
|
||||
item->value.u.blob.pBlobData = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
if (!item->value.u.blob.pBlobData) return E_OUTOFMEMORY;
|
||||
item->value.blob.pBlobData = HeapAlloc(GetProcessHeap(), 0, count);
|
||||
if (!item->value.blob.pBlobData) return E_OUTOFMEMORY;
|
||||
|
||||
item->value.u.blob.cbSize = count;
|
||||
item->value.blob.cbSize = count;
|
||||
|
||||
if (count <= 4)
|
||||
{
|
||||
const char *data = (const char *)&entry->value;
|
||||
memcpy(item->value.u.blob.pBlobData, data, count);
|
||||
memcpy(item->value.blob.pBlobData, data, count);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -974,14 +974,14 @@ static HRESULT load_IFD_entry(IStream *input, const struct IFD_entry *entry,
|
|||
hr = IStream_Seek(input, pos, SEEK_SET, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.blob.pBlobData);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.blob.pBlobData);
|
||||
return hr;
|
||||
}
|
||||
hr = IStream_Read(input, item->value.u.blob.pBlobData, count, &bytesread);
|
||||
hr = IStream_Read(input, item->value.blob.pBlobData, count, &bytesread);
|
||||
if (bytesread != count) hr = E_FAIL;
|
||||
if (hr != S_OK)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, item->value.u.blob.pBlobData);
|
||||
HeapFree(GetProcessHeap(), 0, item->value.blob.pBlobData);
|
||||
return hr;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -234,10 +234,10 @@ static HRESULT get_token(struct string_t *elem, PROPVARIANT *id, PROPVARIANT *sc
|
|||
if (vt == VT_ILLEGAL) return WINCODEC_ERR_WRONGSTATE;
|
||||
|
||||
next_token.vt = VT_BSTR;
|
||||
next_token.u.bstrVal = SysAllocStringLen(NULL, elem->len - (end - start) + 1);
|
||||
if (!next_token.u.bstrVal) return E_OUTOFMEMORY;
|
||||
next_token.bstrVal = SysAllocStringLen(NULL, elem->len - (end - start) + 1);
|
||||
if (!next_token.bstrVal) return E_OUTOFMEMORY;
|
||||
|
||||
bstr = next_token.u.bstrVal;
|
||||
bstr = next_token.bstrVal;
|
||||
|
||||
end++;
|
||||
while (*end && *end != '}' && end - start < elem->len)
|
||||
|
@ -251,19 +251,19 @@ static HRESULT get_token(struct string_t *elem, PROPVARIANT *id, PROPVARIANT *sc
|
|||
return WINCODEC_ERR_INVALIDQUERYREQUEST;
|
||||
}
|
||||
*bstr = 0;
|
||||
TRACE("schema/id %s\n", wine_dbgstr_w(next_token.u.bstrVal));
|
||||
TRACE("schema/id %s\n", wine_dbgstr_w(next_token.bstrVal));
|
||||
|
||||
if (vt == VT_CLSID)
|
||||
{
|
||||
id->vt = VT_CLSID;
|
||||
id->u.puuid = CoTaskMemAlloc(sizeof(GUID));
|
||||
if (!id->u.puuid)
|
||||
id->puuid = CoTaskMemAlloc(sizeof(GUID));
|
||||
if (!id->puuid)
|
||||
{
|
||||
PropVariantClear(&next_token);
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
hr = UuidFromStringW(next_token.u.bstrVal, id->u.puuid);
|
||||
hr = UuidFromStringW(next_token.bstrVal, id->puuid);
|
||||
}
|
||||
else
|
||||
hr = PropVariantChangeType(id, &next_token, 0, vt);
|
||||
|
@ -325,10 +325,10 @@ static HRESULT get_token(struct string_t *elem, PROPVARIANT *id, PROPVARIANT *sc
|
|||
elem->len = end - start;
|
||||
|
||||
id->vt = VT_BSTR;
|
||||
id->u.bstrVal = SysAllocStringLen(NULL, elem->len + 1);
|
||||
if (!id->u.bstrVal) return E_OUTOFMEMORY;
|
||||
id->bstrVal = SysAllocStringLen(NULL, elem->len + 1);
|
||||
if (!id->bstrVal) return E_OUTOFMEMORY;
|
||||
|
||||
bstr = id->u.bstrVal;
|
||||
bstr = id->bstrVal;
|
||||
p = elem->str;
|
||||
while (p - elem->str < elem->len)
|
||||
{
|
||||
|
@ -428,16 +428,16 @@ static HRESULT get_next_reader(IWICMetadataReader *reader, UINT index,
|
|||
if (index)
|
||||
{
|
||||
schema.vt = VT_UI2;
|
||||
schema.u.uiVal = index;
|
||||
schema.uiVal = index;
|
||||
}
|
||||
|
||||
id.vt = VT_CLSID;
|
||||
id.u.puuid = guid;
|
||||
id.puuid = guid;
|
||||
hr = IWICMetadataReader_GetValue(reader, &schema, &id, &value);
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
if (value.vt == VT_UNKNOWN)
|
||||
hr = IUnknown_QueryInterface(value.u.punkVal, &IID_IWICMetadataReader, (void **)new_reader);
|
||||
hr = IUnknown_QueryInterface(value.punkVal, &IID_IWICMetadataReader, (void **)new_reader);
|
||||
else
|
||||
hr = WINCODEC_ERR_UNEXPECTEDMETADATATYPE;
|
||||
|
||||
|
@ -499,7 +499,7 @@ static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCW
|
|||
|
||||
if (!elem.len) break;
|
||||
|
||||
if (tk_id.vt == VT_CLSID || (tk_id.vt == VT_BSTR && WICMapShortNameToGuid(tk_id.u.bstrVal, &guid) == S_OK))
|
||||
if (tk_id.vt == VT_CLSID || (tk_id.vt == VT_BSTR && WICMapShortNameToGuid(tk_id.bstrVal, &guid) == S_OK))
|
||||
{
|
||||
WCHAR *root;
|
||||
|
||||
|
@ -509,7 +509,7 @@ static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCW
|
|||
PropVariantClear(&tk_schema);
|
||||
}
|
||||
|
||||
if (tk_id.vt == VT_CLSID) guid = *tk_id.u.puuid;
|
||||
if (tk_id.vt == VT_CLSID) guid = *tk_id.puuid;
|
||||
|
||||
if (reader)
|
||||
{
|
||||
|
@ -534,7 +534,7 @@ static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCW
|
|||
|
||||
PropVariantClear(&new_value);
|
||||
new_value.vt = VT_UNKNOWN;
|
||||
hr = MetadataQueryReader_CreateInstance(This->block, root, (IWICMetadataQueryReader **)&new_value.u.punkVal);
|
||||
hr = MetadataQueryReader_CreateInstance(This->block, root, (IWICMetadataQueryReader **)&new_value.punkVal);
|
||||
SysFreeString(root);
|
||||
if (hr != S_OK) break;
|
||||
}
|
||||
|
@ -554,9 +554,9 @@ static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCW
|
|||
if (hr != S_OK) break;
|
||||
|
||||
schema.vt = VT_LPWSTR;
|
||||
schema.u.pwszVal = (LPWSTR)map_shortname_to_schema(&guid, tk_schema.u.bstrVal);
|
||||
if (!schema.u.pwszVal)
|
||||
schema.u.pwszVal = tk_schema.u.bstrVal;
|
||||
schema.pwszVal = (LPWSTR)map_shortname_to_schema(&guid, tk_schema.bstrVal);
|
||||
if (!schema.pwszVal)
|
||||
schema.pwszVal = tk_schema.bstrVal;
|
||||
}
|
||||
else
|
||||
schema = tk_schema;
|
||||
|
@ -564,7 +564,7 @@ static HRESULT WINAPI mqr_GetMetadataByName(IWICMetadataQueryReader *iface, LPCW
|
|||
if (tk_id.vt == VT_BSTR)
|
||||
{
|
||||
id.vt = VT_LPWSTR;
|
||||
id.u.pwszVal = tk_id.u.bstrVal;
|
||||
id.pwszVal = tk_id.bstrVal;
|
||||
}
|
||||
else
|
||||
id = tk_id;
|
||||
|
|
|
@ -83,9 +83,9 @@ static HRESULT LoadTextMetadata(IStream *stream, const GUID *preferred_vendor,
|
|||
value[value_len] = 0;
|
||||
|
||||
result[0].id.vt = VT_LPSTR;
|
||||
result[0].id.u.pszVal = name;
|
||||
result[0].id.pszVal = name;
|
||||
result[0].value.vt = VT_LPSTR;
|
||||
result[0].value.u.pszVal = value;
|
||||
result[0].value.pszVal = value;
|
||||
|
||||
*items = result;
|
||||
*item_count = 1;
|
||||
|
@ -146,9 +146,9 @@ static HRESULT LoadGamaMetadata(IStream *stream, const GUID *preferred_vendor,
|
|||
memcpy(name, L"ImageGamma", sizeof(L"ImageGamma"));
|
||||
|
||||
result[0].id.vt = VT_LPWSTR;
|
||||
result[0].id.u.pwszVal = name;
|
||||
result[0].id.pwszVal = name;
|
||||
result[0].value.vt = VT_UI4;
|
||||
result[0].value.u.ulVal = gamma;
|
||||
result[0].value.ulVal = gamma;
|
||||
|
||||
*items = result;
|
||||
*item_count = 1;
|
||||
|
@ -218,12 +218,12 @@ static HRESULT LoadChrmMetadata(IStream *stream, const GUID *preferred_vendor,
|
|||
|
||||
PropVariantInit(&result[i].id);
|
||||
result[i].id.vt = VT_LPWSTR;
|
||||
result[i].id.u.pwszVal = dyn_names[i];
|
||||
result[i].id.pwszVal = dyn_names[i];
|
||||
lstrcpyW(dyn_names[i], names[i]);
|
||||
|
||||
PropVariantInit(&result[i].value);
|
||||
result[i].value.vt = VT_UI4;
|
||||
result[i].value.u.ulVal = read_ulong_be(&data[i*4]);
|
||||
result[i].value.ulVal = read_ulong_be(&data[i*4]);
|
||||
}
|
||||
|
||||
*items = result;
|
||||
|
|
Loading…
Reference in New Issue