25#define NONAMELESSUNION
89 IWICMetadataBlockReader_Release(
This->block);
102 return IWICMetadataBlockReader_GetContainerFormat(
This->block,
format);
121 if (
len < actual_len)
145 { 4, {
'c',
'h',
'a',
'r'},
VT_I1 },
146 { 5, {
'u',
'c',
'h',
'a',
'r'},
VT_UI1 },
147 { 5, {
's',
'h',
'o',
'r',
't'},
VT_I2 },
148 { 6, {
'u',
's',
'h',
'o',
'r',
't'},
VT_UI2 },
149 { 4, {
'l',
'o',
'n',
'g'},
VT_I4 },
150 { 5, {
'u',
'l',
'o',
'n',
'g'},
VT_UI4 },
151 { 3, {
'i',
'n',
't'},
VT_I4 },
152 { 4, {
'u',
'i',
'n',
't'},
VT_UI4 },
153 { 8, {
'l',
'o',
'n',
'g',
'l',
'o',
'n',
'g'},
VT_I8 },
154 { 9, {
'u',
'l',
'o',
'n',
'g',
'l',
'o',
'n',
'g'},
VT_UI8 },
155 { 5, {
'f',
'l',
'o',
'a',
't'},
VT_R4 },
156 { 6, {
'd',
'o',
'u',
'b',
'l',
'e'},
VT_R8 },
160 { 4, {
'b',
'o',
'o',
'l'},
VT_BOOL }
215 TRACE(
"get_token error %#x\n",
hr);
223 else if (*
start ==
'{')
283 PROPVARIANT next_id, next_schema;
288 hr =
get_token(&next_elem, &next_id, &next_schema, &next_idx);
291 TRACE(
"get_token error %#x\n",
hr);
321 next_elem.
str =
p + 1;
333 bstr =
id->u.bstrVal;
345 PROPVARIANT next_id, next_schema;
348 hr =
get_token(&next_elem, &next_id, &next_schema, &next_idx);
351 TRACE(
"get_token error %#x\n",
hr);
356 elem->len += next_elem.
len + 1;
386 hr = IWICMetadataBlockReader_GetCount(block_reader, &
count);
393 hr = IWICMetadataBlockReader_GetReaderByIndex(block_reader,
i, &new_reader);
396 hr = IWICMetadataReader_GetMetadataFormat(new_reader, &
format);
401 if (matched_index ==
index)
411 IWICMetadataReader_Release(new_reader);
427 PropVariantInit(&
id);
428 PropVariantInit(&
value);
442 hr = IUnknown_QueryInterface(
value.u.punkVal, &IID_IWICMetadataReader, (
void **)new_reader);
457 PROPVARIANT tk_id, tk_schema, new_value;
472 PropVariantInit(&tk_id);
473 PropVariantInit(&tk_schema);
474 PropVariantInit(&new_value);
483 WARN(
"query should start with '/'\n");
496 WARN(
"get_token error %#x\n",
hr);
500 TRACE(
"id %s, schema %s\n", wine_dbgstr_variant((
VARIANT *)&tk_id), wine_dbgstr_variant((
VARIANT *)&tk_schema));
502 if (!
elem.len)
break;
510 FIXME(
"unsupported schema vt %u\n", tk_schema.
vt);
521 IWICMetadataReader_Release(
reader);
555 hr = IWICMetadataReader_GetMetadataFormat(
reader, &
guid);
569 id.u.pwszVal = tk_id.u.
bstrVal;
575 hr = IWICMetadataReader_GetValue(
reader, &
schema, &
id, &new_value);
586 IWICMetadataReader_Release(
reader);
627 obj->IWICMetadataQueryReader_iface.lpVtbl = &
mqr_vtbl;
630 IWICMetadataBlockReader_AddRef(mbr);
635 *
out = &
obj->IWICMetadataQueryReader_iface;
659static const WCHAR _8bimResInfoW[] = {
'8',
'b',
'i',
'm',
'R',
'e',
's',
'I',
'n',
'f',
'o',0 };
660static const WCHAR _8bimiptcdigestW[] = {
'8',
'b',
'i',
'm',
'i',
'p',
't',
'c',
'd',
'i',
'g',
'e',
's',
't',0 };
668static const WCHAR logscrdescW[] = {
'l',
'o',
'g',
's',
'c',
'r',
'd',
'e',
's',
'c',0 };
672static const WCHAR chrominanceW[] = {
'c',
'h',
'r',
'o',
'm',
'i',
'n',
'a',
'n',
'c',
'e',0 };
675static const WCHAR commentextW[] = {
'c',
'o',
'm',
'm',
'e',
'n',
't',
'e',
'x',
't',0 };
691 { &GUID_ContainerFormatBmp,
bmpW },
692 { &GUID_ContainerFormatPng,
pngW },
693 { &GUID_ContainerFormatIco,
icoW },
694 { &GUID_ContainerFormatJpeg,
jpgW },
695 { &GUID_ContainerFormatTiff,
tiffW },
696 { &GUID_ContainerFormatGif,
gifW },
697 { &GUID_ContainerFormatWmp,
wmphotoW },
698 { &GUID_MetadataFormatUnknown,
unknownW },
699 { &GUID_MetadataFormatIfd,
ifdW },
700 { &GUID_MetadataFormatSubIfd,
subW },
701 { &GUID_MetadataFormatExif,
exifW },
702 { &GUID_MetadataFormatGps,
gpsW },
703 { &GUID_MetadataFormatInterop,
interopW },
704 { &GUID_MetadataFormatApp0,
app0W },
705 { &GUID_MetadataFormatApp1,
app1W },
706 { &GUID_MetadataFormatApp13,
app13W },
707 { &GUID_MetadataFormatIPTC,
iptcW },
708 { &GUID_MetadataFormatIRB,
irbW },
712 { &GUID_MetadataFormatXMP,
xmpW },
713 { &GUID_MetadataFormatThumbnail,
thumbW },
714 { &GUID_MetadataFormatChunktEXt,
tEXtW },
715 { &GUID_MetadataFormatXMPStruct,
xmpstructW },
716 { &GUID_MetadataFormatXMPBag,
xmpbagW },
717 { &GUID_MetadataFormatXMPSeq,
xmpseqW },
718 { &GUID_MetadataFormatXMPAlt,
xmpaltW },
720 { &GUID_MetadataFormatIMD,
imgdescW },
722 { &GUID_MetadataFormatAPE,
appextW },
724 { &GUID_MetadataFormatJpegLuminance,
luminanceW },
725 { &GUID_MetadataFormatJpegComment,
comW },
727 { &GUID_MetadataFormatChunkgAMA,
gAMAW },
728 { &GUID_MetadataFormatChunkbKGD,
bKGDW },
729 { &GUID_MetadataFormatChunkiTXt,
iTXtW },
730 { &GUID_MetadataFormatChunkcHRM,
cHRMW },
731 { &GUID_MetadataFormatChunkhIST,
hISTW },
732 { &GUID_MetadataFormatChunkiCCP,
iCCPW },
733 { &GUID_MetadataFormatChunksRGB,
sRGBW },
734 { &GUID_MetadataFormatChunktIME,
tIMEW }
789static const WCHAR rdf_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'w',
'w',
'w',
'.',
'w',
'3',
'.',
'o',
'r',
'g',
'/',
'1',
'9',
'9',
'9',
'/',
'0',
'2',
'/',
'2',
'2',
'-',
'r',
'd',
'f',
'-',
's',
'y',
'n',
't',
'a',
'x',
'-',
'n',
's',
'#',0 };
791static const WCHAR dc_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'p',
'u',
'r',
'l',
'.',
'o',
'r',
'g',
'/',
'd',
'c',
'/',
'e',
'l',
'e',
'm',
'e',
'n',
't',
's',
'/',
'1',
'.',
'1',
'/',0 };
793static const WCHAR xmp_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',0 };
795static const WCHAR xmpidq_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'm',
'p',
'/',
'I',
'd',
'e',
'n',
't',
'i',
'f',
'i',
'e',
'r',
'/',
'q',
'u',
'a',
'l',
'/',
'1',
'.',
'0',
'/',0 };
797static const WCHAR xmpRights_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'r',
'i',
'g',
'h',
't',
's',
'/',0 };
799static const WCHAR xmpMM_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'm',
'm',
'/',0 };
801static const WCHAR xmpBJ_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'b',
'j',
'/',0 };
803static const WCHAR xmpTPg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
't',
'/',
'p',
'g',
'/',0 };
805static const WCHAR pdf_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'p',
'd',
'f',
'/',
'1',
'.',
'3',
'/',0 };
807static const WCHAR photoshop_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
's',
'h',
'o',
'p',
'/',
'1',
'.',
'0',
'/',0 };
809static const WCHAR tiff_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
't',
'i',
'f',
'f',
'/',
'1',
'.',
'0',
'/',0 };
811static const WCHAR exif_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'e',
'x',
'i',
'f',
'/',
'1',
'.',
'0',
'/',0 };
813static const WCHAR stDim_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'D',
'i',
'm',
'e',
'n',
's',
'i',
'o',
'n',
's',
'#',0 };
815static const WCHAR xapGImg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
'g',
'/',
'i',
'm',
'g',
'/',0 };
817static const WCHAR stEvt_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'R',
'e',
's',
'o',
'u',
'r',
'c',
'e',
'E',
'v',
'e',
'n',
't',
'#',0 };
819static const WCHAR stRef_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'R',
'e',
's',
'o',
'u',
'r',
'c',
'e',
'R',
'e',
'f',
'#',0 };
821static const WCHAR stVer_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'#',0 };
823static const WCHAR stJob_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'a',
'p',
'/',
'1',
'.',
'0',
'/',
's',
'T',
'y',
'p',
'e',
'/',
'J',
'o',
'b',
'#',0 };
825static const WCHAR aux_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'e',
'x',
'i',
'f',
'/',
'1',
'.',
'0',
'/',
'a',
'u',
'x',
'/',0 };
827static const WCHAR crs_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'c',
'a',
'm',
'e',
'r',
'a',
'-',
'r',
'a',
'w',
'-',
's',
'e',
't',
't',
'i',
'n',
'g',
's',
'/',
'1',
'.',
'0',
'/',0 };
829static const WCHAR xmpDM_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'a',
'd',
'o',
'b',
'e',
'.',
'c',
'o',
'm',
'/',
'x',
'm',
'p',
'/',
'1',
'.',
'0',
'/',
'D',
'y',
'n',
'a',
'm',
'i',
'c',
'M',
'e',
'd',
'i',
'a',
'/',0 };
830static const WCHAR Iptc4xmpCore[] = {
'I',
'p',
't',
'c',
'4',
'x',
'm',
'p',
'C',
'o',
'r',
'e',0 };
831static const WCHAR Iptc4xmpCore_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'i',
'p',
't',
'c',
'.',
'o',
'r',
'g',
'/',
's',
't',
'd',
'/',
'I',
'p',
't',
'c',
'4',
'x',
'm',
'p',
'C',
'o',
'r',
'e',
'/',
'1',
'.',
'0',
'/',
'x',
'm',
'l',
'n',
's',
'/',0 };
832static const WCHAR MicrosoftPhoto[] = {
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'P',
'h',
'o',
't',
'o',0 };
833static const WCHAR MicrosoftPhoto_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'0',
'/',0 };
835static const WCHAR MP_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',0 };
837static const WCHAR MPRI_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',
't',
'/',
'R',
'e',
'g',
'i',
'o',
'n',
'I',
'n',
'f',
'o',
'#',0 };
839static const WCHAR MPReg_scheme[] = {
'h',
't',
't',
'p',
':',
'/',
'/',
'n',
's',
'.',
'm',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'.',
'c',
'o',
'm',
'/',
'p',
'h',
'o',
't',
'o',
'/',
'1',
'.',
'2',
'/',
't',
'/',
'R',
'e',
'g',
'i',
'o',
'n',
'#',0 };
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define ERROR_INSUFFICIENT_BUFFER
int next_token(char **, FILE *)
static WCHAR * heap_strdupW(const WCHAR *str)
static const WCHAR rootW[]
const char * wine_dbgstr_wn(const WCHAR *str, int n)
#define HeapFree(x, y, z)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc, PROPVAR_CHANGE_FLAGS flags, VARTYPE vt)
GLuint GLuint GLsizei count
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
WINE_UNICODE_INLINE WCHAR * memchrW(const WCHAR *ptr, WCHAR ch, size_t n)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
#define LOCALE_SYSTEM_DEFAULT
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define IsEqualGUID(rguid1, rguid2)
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
static __inline const char * wine_dbgstr_guid(const GUID *id)
IWICMetadataQueryReader IWICMetadataQueryReader_iface
IWICMetadataBlockReader * block
#define CONTAINING_RECORD(address, type, field)
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
#define WINCODEC_ERR_WRONGSTATE
#define WINCODEC_ERR_UNEXPECTEDMETADATATYPE
#define WINCODEC_ERR_INVALIDQUERYREQUEST
#define WINCODEC_ERR_PROPERTYNOTSUPPORTED
#define HRESULT_FROM_WIN32(x)
#define DISP_E_TYPEMISMATCH
#define WINCODEC_ERR_INSUFFICIENTBUFFER
#define WINCODEC_ERR_PROPERTYNOTFOUND