ReactOS 0.4.16-dev-2357-g35d0dfe
propidl.idl File Reference

Go to the source code of this file.

Classes

interface  IPropertyStorage
 
struct  IPropertyStorage::tagPROPVARIANT
 
struct  IPropertyStorage::tagPROPSPEC
 
struct  IPropertyStorage::tagSTATPROPSTG
 
struct  IPropertyStorage::tagSTATPROPSETSTG
 
interface  IPropertySetStorage
 
interface  IEnumSTATPROPSTG
 
interface  struct
 

Macros

#define TYPEDEF_CA(type, name)
 

Functions

HRESULT WINAPI FreePropVariantArray (ULONG, PROPVARIANT *)
 
HRESULT WINAPI PropVariantClear (PROPVARIANT *)
 
HRESULT WINAPI PropVariantCopy (PROPVARIANT *, const PROPVARIANT *)
 
HRESULT WINAPI StgCreatePropStg (IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **)
 
HRESULT WINAPI StgOpenPropStg (IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **)
 
HRESULT WINAPI StgCreatePropSetStg (IStorage *, DWORD, IPropertySetStorage **)
 
HRESULT WINAPI FmtIdToPropStgName (const FMTID *, LPOLESTR)
 
HRESULT WINAPI PropStgNameToFmtId (const LPOLESTR, FMTID *)
 

Variables

BYTE rgb [1]
 
 SERIALIZEDPROPERTYVALUE
 

Macro Definition Documentation

◆ TYPEDEF_CA

#define TYPEDEF_CA (   type,
  name 
)
Value:
typedef struct tag##name { \
ULONG cElems; \
[size_is(cElems)] \
type *pElems; \
} name
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: name.c:39
Definition: ecma_167.h:138
uint32_t ULONG
Definition: typedefs.h:59

Definition at line 81 of file propidl.idl.

Function Documentation

◆ FmtIdToPropStgName()

HRESULT WINAPI FmtIdToPropStgName ( const FMTID rfmtid,
LPOLESTR  str 
)

Definition at line 72 of file stg_prop.c.

73{
74 static const char fmtMap[] = "abcdefghijklmnopqrstuvwxyz012345";
75
76 TRACE("%s, %p\n", debugstr_guid(rfmtid), str);
77
78 if (!rfmtid) return E_INVALIDARG;
79 if (!str) return E_INVALIDARG;
80
87 else
88 {
89 const BYTE *fmtptr;
90 WCHAR *pstr = str;
91 ULONG bitsRemaining = BITS_PER_BYTE;
92
93 *pstr++ = 5;
94 for (fmtptr = (const BYTE *)rfmtid; fmtptr < (const BYTE *)rfmtid + sizeof(FMTID); )
95 {
96 ULONG i = *fmtptr >> (BITS_PER_BYTE - bitsRemaining);
97
98 if (bitsRemaining >= BITS_IN_CHARMASK)
99 {
100 *pstr = (WCHAR)(fmtMap[i & CHARMASK]);
101 if (bitsRemaining == BITS_PER_BYTE && *pstr >= 'a' &&
102 *pstr <= 'z')
103 *pstr += 'A' - 'a';
104 pstr++;
105 bitsRemaining -= BITS_IN_CHARMASK;
106 if (bitsRemaining == 0)
107 {
108 fmtptr++;
109 bitsRemaining = BITS_PER_BYTE;
110 }
111 }
112 else
113 {
114 if (++fmtptr < (const BYTE *)rfmtid + sizeof(FMTID))
115 i |= *fmtptr << bitsRemaining;
116 *pstr++ = (WCHAR)(fmtMap[i & CHARMASK]);
117 bitsRemaining += BITS_PER_BYTE - BITS_IN_CHARMASK;
118 }
119 }
120 *pstr = 0;
121 }
122 TRACE("returning %s\n", debugstr_w(str));
123 return S_OK;
124}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define BITS_PER_BYTE
Definition: stg_prop.c:64
static const WCHAR szDocSummaryInfo[]
Definition: stg_prop.c:62
static const WCHAR szSummaryInfo[]
Definition: stg_prop.c:61
#define BITS_IN_CHARMASK
Definition: stg_prop.c:66
#define CHARMASK
Definition: stg_prop.c:65
#define lstrcpyW
Definition: compat.h:749
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
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
const FMTID FMTID_UserDefinedProperties
const FMTID FMTID_DocSummaryInformation
const FMTID FMTID_SummaryInformation
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
GUID FMTID
Definition: guiddef.h:94
const WCHAR * str
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193

Referenced by IPropertySetStorage_fnCreate(), IPropertySetStorage_fnDelete(), IPropertySetStorage_fnOpen(), and testFmtId().

◆ FreePropVariantArray()

HRESULT WINAPI FreePropVariantArray ( ULONG  count,
PROPVARIANT *  rgvars 
)

Definition at line 601 of file combase.c.

602{
603 ULONG i;
604
605 TRACE("%lu, %p.\n", count, rgvars);
606
607 if (!rgvars)
608 return E_INVALIDARG;
609
610 for (i = 0; i < count; ++i)
611 PropVariantClear(&rgvars[i]);
612
613 return S_OK;
614}
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
Definition: combase.c:709
GLuint GLuint GLsizei count
Definition: gl.h:1545

Referenced by PropVariantClear().

◆ PropStgNameToFmtId()

HRESULT WINAPI PropStgNameToFmtId ( const  LPOLESTR,
FMTID rfmtid 
)

Definition at line 129 of file stg_prop.c.

130{
132
133 TRACE("%s, %p\n", debugstr_w(str), rfmtid);
134
135 if (!rfmtid) return E_INVALIDARG;
136 if (!str) return STG_E_INVALIDNAME;
137
139 {
141 hr = S_OK;
142 }
143 else if (!lstrcmpiW(str, szSummaryInfo))
144 {
145 *rfmtid = FMTID_SummaryInformation;
146 hr = S_OK;
147 }
148 else
149 {
150 ULONG bits;
151 BYTE *fmtptr = (BYTE *)rfmtid - 1;
152 const WCHAR *pstr = str;
153
154 memset(rfmtid, 0, sizeof(*rfmtid));
155 for (bits = 0; bits < sizeof(FMTID) * BITS_PER_BYTE;
157 {
158 ULONG bitsUsed = bits % BITS_PER_BYTE, bitsStored;
159 WCHAR wc;
160
161 if (bitsUsed == 0)
162 fmtptr++;
163 wc = *++pstr - 'A';
164 if (wc > NUM_ALPHA_CHARS)
165 {
166 wc += 'A' - 'a';
167 if (wc > NUM_ALPHA_CHARS)
168 {
169 wc += 'a' - '0' + NUM_ALPHA_CHARS;
170 if (wc > CHARMASK)
171 {
172 WARN("invalid character (%d)\n", *pstr);
173 goto end;
174 }
175 }
176 }
177 *fmtptr |= wc << bitsUsed;
178 bitsStored = min(BITS_PER_BYTE - bitsUsed, BITS_IN_CHARMASK);
179 if (bitsStored < BITS_IN_CHARMASK)
180 {
181 wc >>= BITS_PER_BYTE - bitsUsed;
182 if (bits + bitsStored == sizeof(FMTID) * BITS_PER_BYTE)
183 {
184 if (wc != 0)
185 {
186 WARN("extra bits\n");
187 goto end;
188 }
189 break;
190 }
191 fmtptr++;
192 *fmtptr |= (BYTE)wc;
193 }
194 }
195 hr = S_OK;
196 }
197end:
198 return hr;
199}
#define WARN(fmt,...)
Definition: precomp.h:61
#define NUM_ALPHA_CHARS
Definition: stg_prop.c:67
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
GLuint GLuint end
Definition: gl.h:1545
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define bits
Definition: infblock.c:15
#define min(a, b)
Definition: monoChain.cc:55
#define memset(x, y, z)
Definition: compat.h:39
HRESULT hr
Definition: shlfolder.c:183
#define STG_E_INVALIDNAME
Definition: winerror.h:3680

Referenced by create_enum_stat_propset_stg(), and testFmtId().

◆ PropVariantClear()

HRESULT WINAPI PropVariantClear ( PROPVARIANT *  pvar)

Definition at line 709 of file combase.c.

710{
711 HRESULT hr;
712
713 TRACE("%p.\n", pvar);
714
715 if (!pvar)
716 return S_OK;
717
718 hr = propvar_validatetype(pvar->vt);
719 if (FAILED(hr))
720 {
721 memset(pvar, 0, sizeof(*pvar));
722 return hr;
723 }
724
725 switch (pvar->vt)
726 {
727 case VT_EMPTY:
728 case VT_NULL:
729 case VT_I1:
730 case VT_I2:
731 case VT_I4:
732 case VT_I8:
733 case VT_R4:
734 case VT_R8:
735 case VT_CY:
736 case VT_DATE:
737 case VT_ERROR:
738 case VT_BOOL:
739 case VT_DECIMAL:
740 case VT_UI1:
741 case VT_UI2:
742 case VT_UI4:
743 case VT_UI8:
744 case VT_INT:
745 case VT_UINT:
746 case VT_FILETIME:
747 break;
748 case VT_DISPATCH:
749 case VT_UNKNOWN:
750 case VT_STREAM:
752 case VT_STORAGE:
753 case VT_STORED_OBJECT:
754 if (pvar->pStream)
755 IStream_Release(pvar->pStream);
756 break;
757 case VT_CLSID:
758 case VT_LPSTR:
759 case VT_LPWSTR:
760 /* pick an arbitrary typed pointer - we don't care about the type
761 * as we are just freeing it */
762 CoTaskMemFree(pvar->puuid);
763 break;
764 case VT_BLOB:
765 case VT_BLOB_OBJECT:
766 CoTaskMemFree(pvar->blob.pBlobData);
767 break;
768 case VT_BSTR:
769 SysFreeString(pvar->bstrVal);
770 break;
771 case VT_CF:
772 if (pvar->pclipdata)
773 {
774 propvar_free_cf_array(1, pvar->pclipdata);
775 CoTaskMemFree(pvar->pclipdata);
776 }
777 break;
778 default:
779 if (pvar->vt & VT_VECTOR)
780 {
781 ULONG i;
782
783 switch (pvar->vt & ~VT_VECTOR)
784 {
785 case VT_VARIANT:
786 FreePropVariantArray(pvar->capropvar.cElems, pvar->capropvar.pElems);
787 break;
788 case VT_CF:
789 propvar_free_cf_array(pvar->caclipdata.cElems, pvar->caclipdata.pElems);
790 break;
791 case VT_BSTR:
792 for (i = 0; i < pvar->cabstr.cElems; i++)
793 SysFreeString(pvar->cabstr.pElems[i]);
794 break;
795 case VT_LPSTR:
796 for (i = 0; i < pvar->calpstr.cElems; i++)
797 CoTaskMemFree(pvar->calpstr.pElems[i]);
798 break;
799 case VT_LPWSTR:
800 for (i = 0; i < pvar->calpwstr.cElems; i++)
801 CoTaskMemFree(pvar->calpwstr.pElems[i]);
802 break;
803 }
804 if (pvar->vt & ~VT_VECTOR)
805 {
806 /* pick an arbitrary VT_VECTOR structure - they all have the same
807 * memory layout */
808 CoTaskMemFree(pvar->capropvar.pElems);
809 }
810 }
811 else if (pvar->vt & VT_ARRAY)
812 hr = SafeArrayDestroy(pvar->parray);
813 else
814 {
815 WARN("Invalid/unsupported type %d\n", pvar->vt);
817 }
818 }
819
820 memset(pvar, 0, sizeof(*pvar));
821 return hr;
822}
static HRESULT propvar_validatetype(VARTYPE vt)
Definition: combase.c:616
static void propvar_free_cf_array(ULONG count, CLIPDATA *data)
Definition: combase.c:699
HRESULT WINAPI FreePropVariantArray(ULONG count, PROPVARIANT *rgvars)
Definition: combase.c:601
@ VT_BLOB
Definition: compat.h:2330
@ VT_UI8
Definition: compat.h:2315
@ VT_BLOB_OBJECT
Definition: compat.h:2335
@ VT_BSTR
Definition: compat.h:2303
@ VT_INT
Definition: compat.h:2316
@ VT_LPSTR
Definition: compat.h:2324
@ VT_R4
Definition: compat.h:2299
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_UI2
Definition: compat.h:2312
@ VT_DECIMAL
Definition: compat.h:2309
@ VT_ERROR
Definition: compat.h:2305
@ VT_CLSID
Definition: compat.h:2337
@ VT_STREAM
Definition: compat.h:2331
@ VT_ARRAY
Definition: compat.h:2341
@ VT_STORED_OBJECT
Definition: compat.h:2334
@ VT_LPWSTR
Definition: compat.h:2325
@ VT_R8
Definition: compat.h:2300
@ VT_CY
Definition: compat.h:2301
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_CF
Definition: compat.h:2336
@ VT_STORAGE
Definition: compat.h:2332
@ VT_FILETIME
Definition: compat.h:2329
@ VT_DATE
Definition: compat.h:2302
@ VT_BOOL
Definition: compat.h:2306
@ VT_STREAMED_OBJECT
Definition: compat.h:2333
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UINT
Definition: compat.h:2317
@ VT_EMPTY
Definition: compat.h:2295
@ VT_VECTOR
Definition: compat.h:2340
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1347
#define FAILED(hr)
Definition: intsafe.h:51
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define STG_E_INVALIDPARAMETER
Definition: winerror.h:3675

Referenced by check_tiff_format(), compare_metadata(), destroy_format(), free_header(), FreePropVariantArray(), GdipGetAllPropertyItems(), GdipGetPropertyItem(), GdipGetPropertyItemSize(), GdipGetPropertySize(), get_bool_property(), get_next_reader(), get_property(), get_token(), get_ulong_by_index(), InitPropVariantFromStringVector(), MetadataHandler_FreeItems(), MimeBody_GetProp(), MMDevice_Create(), MMDevice_GetPropValue(), mqr_GetMetadataByName(), on_mime_message_available(), PersistFile_Save(), png_metadata_reader(), PropertyStorage_PropertyDestroy(), PropertyStorage_ReadFromStream(), PropertyStorage_StorePropWithId(), PropertyStore_SetValue(), PropertyStore_SetValueAndState(), PropVariantCompareEx(), set_driver_prop_value(), test_BodyDeleteProp(), test_convert(), test_copy(), test_CreateMessage(), test_CreateMetadataWriterFromReader(), test_deviceinterface(), test_first_device(), test_ifd_content(), test_InitPropVariantFromBuffer(), test_InitPropVariantFromCLSID(), test_InitPropVariantFromStringVector(), test_intconversions(), test_MessageGetPropInfo(), test_MessageOptions(), test_MessageSetProp(), test_metadata_APE(), test_metadata_App1(), test_metadata_cHRM(), test_metadata_gAMA(), test_metadata_gif(), test_metadata_GIF_comment(), test_metadata_hIST(), test_metadata_tEXt(), test_metadata_unknown(), test_propertystore(), test_propertytovariant(), test_PropVariantChangeType_LPWSTR(), test_PropVariantToBSTR(), test_PropVariantToBuffer(), test_PropVariantToDouble(), test_PropVariantToGUID(), test_PropVariantToString(), test_PropVariantToStringAlloc(), test_PropVariantToVariant(), test_queryreader(), test_validtypes(), test_VariantToPropVariant(), testCodepage(), and testPropsHelper().

◆ PropVariantCopy()

HRESULT WINAPI PropVariantCopy ( PROPVARIANT *  pvarDest,
const PROPVARIANT *  pvarSrc 
)

Definition at line 827 of file combase.c.

828{
829 ULONG len;
830 HRESULT hr;
831
832 TRACE("%p, %p vt %04x.\n", pvarDest, pvarSrc, pvarSrc->vt);
833
834 hr = propvar_validatetype(pvarSrc->vt);
835 if (FAILED(hr))
836 return DISP_E_BADVARTYPE;
837
838 /* this will deal with most cases */
839 *pvarDest = *pvarSrc;
840
841 switch (pvarSrc->vt)
842 {
843 case VT_EMPTY:
844 case VT_NULL:
845 case VT_I1:
846 case VT_UI1:
847 case VT_I2:
848 case VT_UI2:
849 case VT_BOOL:
850 case VT_DECIMAL:
851 case VT_I4:
852 case VT_UI4:
853 case VT_R4:
854 case VT_ERROR:
855 case VT_I8:
856 case VT_UI8:
857 case VT_INT:
858 case VT_UINT:
859 case VT_R8:
860 case VT_CY:
861 case VT_DATE:
862 case VT_FILETIME:
863 break;
864 case VT_DISPATCH:
865 case VT_UNKNOWN:
866 case VT_STREAM:
868 case VT_STORAGE:
869 case VT_STORED_OBJECT:
870 if (pvarDest->pStream)
871 IStream_AddRef(pvarDest->pStream);
872 break;
873 case VT_CLSID:
874 pvarDest->puuid = CoTaskMemAlloc(sizeof(CLSID));
875 *pvarDest->puuid = *pvarSrc->puuid;
876 break;
877 case VT_LPSTR:
878 if (pvarSrc->pszVal)
879 {
880 len = strlen(pvarSrc->pszVal);
881 pvarDest->pszVal = CoTaskMemAlloc((len+1)*sizeof(CHAR));
882 CopyMemory(pvarDest->pszVal, pvarSrc->pszVal, (len+1)*sizeof(CHAR));
883 }
884 break;
885 case VT_LPWSTR:
886 if (pvarSrc->pwszVal)
887 {
888 len = lstrlenW(pvarSrc->pwszVal);
889 pvarDest->pwszVal = CoTaskMemAlloc((len+1)*sizeof(WCHAR));
890 CopyMemory(pvarDest->pwszVal, pvarSrc->pwszVal, (len+1)*sizeof(WCHAR));
891 }
892 break;
893 case VT_BLOB:
894 case VT_BLOB_OBJECT:
895 if (pvarSrc->blob.pBlobData)
896 {
897 len = pvarSrc->blob.cbSize;
898 pvarDest->blob.pBlobData = CoTaskMemAlloc(len);
899 CopyMemory(pvarDest->blob.pBlobData, pvarSrc->blob.pBlobData, len);
900 }
901 break;
902 case VT_BSTR:
903 pvarDest->bstrVal = SysAllocString(pvarSrc->bstrVal);
904 break;
905 case VT_CF:
906 if (pvarSrc->pclipdata)
907 {
908 len = pvarSrc->pclipdata->cbSize - sizeof(pvarSrc->pclipdata->ulClipFmt);
909 pvarDest->pclipdata = CoTaskMemAlloc(sizeof (CLIPDATA));
910 pvarDest->pclipdata->cbSize = pvarSrc->pclipdata->cbSize;
911 pvarDest->pclipdata->ulClipFmt = pvarSrc->pclipdata->ulClipFmt;
912 pvarDest->pclipdata->pClipData = CoTaskMemAlloc(len);
913 CopyMemory(pvarDest->pclipdata->pClipData, pvarSrc->pclipdata->pClipData, len);
914 }
915 break;
916 default:
917 if (pvarSrc->vt & VT_VECTOR)
918 {
919 int elemSize;
920 ULONG i;
921
922 switch (pvarSrc->vt & ~VT_VECTOR)
923 {
924 case VT_I1: elemSize = sizeof(pvarSrc->cVal); break;
925 case VT_UI1: elemSize = sizeof(pvarSrc->bVal); break;
926 case VT_I2: elemSize = sizeof(pvarSrc->iVal); break;
927 case VT_UI2: elemSize = sizeof(pvarSrc->uiVal); break;
928 case VT_BOOL: elemSize = sizeof(pvarSrc->boolVal); break;
929 case VT_I4: elemSize = sizeof(pvarSrc->lVal); break;
930 case VT_UI4: elemSize = sizeof(pvarSrc->ulVal); break;
931 case VT_R4: elemSize = sizeof(pvarSrc->fltVal); break;
932 case VT_R8: elemSize = sizeof(pvarSrc->dblVal); break;
933 case VT_ERROR: elemSize = sizeof(pvarSrc->scode); break;
934 case VT_I8: elemSize = sizeof(pvarSrc->hVal); break;
935 case VT_UI8: elemSize = sizeof(pvarSrc->uhVal); break;
936 case VT_CY: elemSize = sizeof(pvarSrc->cyVal); break;
937 case VT_DATE: elemSize = sizeof(pvarSrc->date); break;
938 case VT_FILETIME: elemSize = sizeof(pvarSrc->filetime); break;
939 case VT_CLSID: elemSize = sizeof(*pvarSrc->puuid); break;
940 case VT_CF: elemSize = sizeof(*pvarSrc->pclipdata); break;
941 case VT_BSTR: elemSize = sizeof(pvarSrc->bstrVal); break;
942 case VT_LPSTR: elemSize = sizeof(pvarSrc->pszVal); break;
943 case VT_LPWSTR: elemSize = sizeof(pvarSrc->pwszVal); break;
944 case VT_VARIANT: elemSize = sizeof(*pvarSrc->pvarVal); break;
945
946 default:
947 FIXME("Invalid element type: %ul\n", pvarSrc->vt & ~VT_VECTOR);
948 return E_INVALIDARG;
949 }
950 len = pvarSrc->capropvar.cElems;
951 pvarDest->capropvar.pElems = len ? CoTaskMemAlloc(len * elemSize) : NULL;
952 if (pvarSrc->vt == (VT_VECTOR | VT_VARIANT))
953 {
954 for (i = 0; i < len; i++)
955 PropVariantCopy(&pvarDest->capropvar.pElems[i], &pvarSrc->capropvar.pElems[i]);
956 }
957 else if (pvarSrc->vt == (VT_VECTOR | VT_CF))
958 {
959 FIXME("Copy clipformats\n");
960 }
961 else if (pvarSrc->vt == (VT_VECTOR | VT_BSTR))
962 {
963 for (i = 0; i < len; i++)
964 pvarDest->cabstr.pElems[i] = SysAllocString(pvarSrc->cabstr.pElems[i]);
965 }
966 else if (pvarSrc->vt == (VT_VECTOR | VT_LPSTR))
967 {
968 size_t strLen;
969 for (i = 0; i < len; i++)
970 {
971 strLen = lstrlenA(pvarSrc->calpstr.pElems[i]) + 1;
972 pvarDest->calpstr.pElems[i] = CoTaskMemAlloc(strLen);
973 memcpy(pvarDest->calpstr.pElems[i],
974 pvarSrc->calpstr.pElems[i], strLen);
975 }
976 }
977 else if (pvarSrc->vt == (VT_VECTOR | VT_LPWSTR))
978 {
979 size_t strLen;
980 for (i = 0; i < len; i++)
981 {
982 strLen = (lstrlenW(pvarSrc->calpwstr.pElems[i]) + 1) *
983 sizeof(WCHAR);
984 pvarDest->calpstr.pElems[i] = CoTaskMemAlloc(strLen);
985 memcpy(pvarDest->calpstr.pElems[i],
986 pvarSrc->calpstr.pElems[i], strLen);
987 }
988 }
989 else
990 CopyMemory(pvarDest->capropvar.pElems, pvarSrc->capropvar.pElems, len * elemSize);
991 }
992 else if (pvarSrc->vt & VT_ARRAY)
993 {
994 pvarDest->uhVal.QuadPart = 0;
995 return SafeArrayCopy(pvarSrc->parray, &pvarDest->parray);
996 }
997 else
998 WARN("Invalid/unsupported type %d\n", pvarSrc->vt);
999 }
1000
1001 return S_OK;
1002}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define NULL
Definition: types.h:112
HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
Definition: combase.c:827
#define lstrlenW
Definition: compat.h:750
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
Definition: safearray.c:1379
GLenum GLsizei len
Definition: glext.h:6722
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
#define CopyMemory
Definition: minwinbase.h:29
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#define DISP_E_BADVARTYPE
Definition: winerror.h:3620
char CHAR
Definition: xmlstorage.h:175

Referenced by IPropertyStorage_fnWriteMultiple(), MetadataHandler_GetValue(), MetadataHandler_GetValueByIndex(), MetadataHandlerEnum_Next(), MimeBody_SetProp(), PropertyStorage_PropVariantCopy(), PropertyStore_GetValue(), PropertyStore_GetValueAndState(), PropertyStore_SetValue(), PropertyStore_SetValueAndState(), PropVariantChangeType(), PropVariantCopy(), test_copy(), and test_validtypes().

◆ StgCreatePropSetStg()

HRESULT WINAPI StgCreatePropSetStg ( IStorage pstg,
DWORD  reserved,
IPropertySetStorage **  propset 
)

Definition at line 233 of file storage32.c.

234{
235 TRACE("%p, %#lx, %p.\n", pstg, reserved, propset);
236 if (reserved)
238
239 return IStorage_QueryInterface(pstg, &IID_IPropertySetStorage, (void**)propset);
240}
r reserved
Definition: btrfs.c:3006

Referenced by test_propertyset_storage_enum(), testCodepage(), and testPropsHelper().

◆ StgCreatePropStg()

HRESULT WINAPI StgCreatePropStg ( IUnknown unk,
REFFMTID  fmt,
const CLSID clsid,
DWORD  flags,
DWORD  reserved,
IPropertyStorage **  prop_stg 
)

Definition at line 3059 of file stg_prop.c.

3061{
3062 IStorage *stg;
3063 IStream *stm;
3064 HRESULT r;
3065
3066 TRACE("%p, %s, %s, %#lx, %ld, %p.\n", unk, debugstr_guid(fmt), debugstr_guid(clsid), flags, reserved, prop_stg);
3067
3068 if (!fmt || reserved)
3069 {
3070 r = E_INVALIDARG;
3071 goto end;
3072 }
3073
3074 if (flags & PROPSETFLAG_NONSIMPLE)
3075 {
3076 r = IUnknown_QueryInterface(unk, &IID_IStorage, (void **)&stg);
3077 if (FAILED(r))
3078 goto end;
3079
3080 /* FIXME: if (flags & PROPSETFLAG_NONSIMPLE), we need to create a
3081 * storage, not a stream. For now, disallow it.
3082 */
3083 FIXME("PROPSETFLAG_NONSIMPLE not supported\n");
3084 IStorage_Release(stg);
3086 }
3087 else
3088 {
3089 r = IUnknown_QueryInterface(unk, &IID_IStream, (void **)&stm);
3090 if (FAILED(r))
3091 goto end;
3092
3095
3096 IStream_Release( stm );
3097 }
3098
3099end:
3100 TRACE("returning %#lx\n", r);
3101 return r;
3102}
static HRESULT PropertyStorage_ConstructEmpty(IStream *stm, REFFMTID rfmtid, DWORD grfFlags, DWORD grfMode, IPropertyStorage **pps)
Definition: stg_prop.c:2568
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLbitfield flags
Definition: glext.h:7161
const CLSID * clsid
Definition: msctf.cpp:50
#define STGM_CREATE
Definition: objbase.h:943
#define STGM_READWRITE
Definition: objbase.h:936
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:940
Definition: dsound.c:943
#define STG_E_INVALIDFLAG
Definition: winerror.h:3683

Referenced by testPropsHelper().

◆ StgOpenPropStg()

HRESULT WINAPI StgOpenPropStg ( IUnknown unk,
REFFMTID  fmt,
DWORD  flags,
DWORD  reserved,
IPropertyStorage **  prop_stg 
)

Definition at line 3104 of file stg_prop.c.

3106{
3107 IStorage *stg;
3108 IStream *stm;
3109 HRESULT r;
3110
3111 TRACE("%p, %s, %#lx, %ld, %p.\n", unk, debugstr_guid(fmt), flags, reserved, prop_stg);
3112
3113 if (!fmt || reserved)
3114 {
3115 r = E_INVALIDARG;
3116 goto end;
3117 }
3118
3119 if (flags & PROPSETFLAG_NONSIMPLE)
3120 {
3121 r = IUnknown_QueryInterface(unk, &IID_IStorage, (void **)&stg);
3122 if (FAILED(r))
3123 goto end;
3124
3125 /* FIXME: if (flags & PROPSETFLAG_NONSIMPLE), we need to open a
3126 * storage, not a stream. For now, disallow it.
3127 */
3128 FIXME("PROPSETFLAG_NONSIMPLE not supported\n");
3129 IStorage_Release(stg);
3131 }
3132 else
3133 {
3134 r = IUnknown_QueryInterface(unk, &IID_IStream, (void **)&stm);
3135 if (FAILED(r))
3136 goto end;
3137
3140
3141 IStream_Release( stm );
3142 }
3143
3144end:
3145 TRACE("returning %#lx\n", r);
3146 return r;
3147}
static HRESULT PropertyStorage_ConstructFromStream(IStream *stm, REFFMTID rfmtid, DWORD grfMode, IPropertyStorage **pps)
Definition: stg_prop.c:2546

Referenced by testPropsHelper().

Variable Documentation

◆ rgb

BYTE rgb[1]

Definition at line 440 of file propidl.idl.

◆ SERIALIZEDPROPERTYVALUE

SERIALIZEDPROPERTYVALUE

Definition at line 441 of file propidl.idl.

Referenced by test_propertytovariant(), and test_varianttoproperty().