diff --git a/reactos/dll/win32/inetcomm/inetcomm.spec b/reactos/dll/win32/inetcomm/inetcomm.spec index 0c90b4db28e..bfd115c5835 100644 --- a/reactos/dll/win32/inetcomm/inetcomm.spec +++ b/reactos/dll/win32/inetcomm/inetcomm.spec @@ -42,7 +42,7 @@ @ stub MimeEditGetBackgroundImageUrl @ stub MimeEditIsSafeToRun @ stub MimeEditViewSource -@ stub MimeGetAddressFormatW +@ stdcall MimeGetAddressFormatW(ptr ptr long long ptr) @ stub MimeOleAlgNameFromSMimeCap @ stub MimeOleAlgStrengthFromSMimeCap @ stub MimeOleClearDirtyTree @@ -79,7 +79,7 @@ @ stdcall MimeOleGetInternat(ptr) @ stub MimeOleGetPropA @ stub MimeOleGetPropW -@ stub MimeOleGetPropertySchema +@ stdcall MimeOleGetPropertySchema(ptr) @ stub MimeOleGetRelatedSection @ stub MimeOleInetDateToFileTime @ stub MimeOleObjectFromMoniker diff --git a/reactos/dll/win32/inetcomm/mimeole.c b/reactos/dll/win32/inetcomm/mimeole.c index 06f0296daad..793c1075855 100644 --- a/reactos/dll/win32/inetcomm/mimeole.c +++ b/reactos/dll/win32/inetcomm/mimeole.c @@ -97,6 +97,17 @@ static inline MimeBody *impl_from_IMimeBody(IMimeBody *iface) return CONTAINING_RECORD(iface, MimeBody, IMimeBody_iface); } +typedef struct propschema +{ + IMimePropertySchema IMimePropertySchema_iface; + LONG ref; +} propschema; + +static inline propschema *impl_from_IMimePropertySchema(IMimePropertySchema *iface) +{ + return CONTAINING_RECORD(iface, propschema, IMimePropertySchema_iface); +} + static LPSTR strdupA(LPCSTR str) { char *ret; @@ -185,7 +196,7 @@ static header_t *read_prop(MimeBody *body, char **ptr) for(prop = default_props; prop->name; prop++) { - if(!strcasecmp(*ptr, prop->name)) + if(!lstrcmpiA(*ptr, prop->name)) { TRACE("%s: found match with default property id %d\n", *ptr, prop->id); break; @@ -197,7 +208,7 @@ static header_t *read_prop(MimeBody *body, char **ptr) property_list_entry_t *prop_entry; LIST_FOR_EACH_ENTRY(prop_entry, &body->new_props, property_list_entry_t, entry) { - if(!strcasecmp(*ptr, prop_entry->prop.name)) + if(!lstrcmpiA(*ptr, prop_entry->prop.name)) { TRACE("%s: found match with already added new property id %d\n", *ptr, prop_entry->prop.id); prop = &prop_entry->prop; @@ -467,7 +478,7 @@ static HRESULT find_prop(MimeBody *body, const char *name, header_t **prop) LIST_FOR_EACH_ENTRY(header, &body->headers, header_t, entry) { - if(!strcasecmp(name, header->prop->name)) + if(!lstrcmpiA(name, header->prop->name)) { *prop = header; return S_OK; @@ -541,7 +552,8 @@ static HRESULT WINAPI MimeBody_GetClassID( IMimeBody* iface, CLSID* pClassID) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pClassID); return E_NOTIMPL; } @@ -549,20 +561,22 @@ static HRESULT WINAPI MimeBody_GetClassID( static HRESULT WINAPI MimeBody_IsDirty( IMimeBody* iface) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->() stub\n", This); return E_NOTIMPL; } static HRESULT WINAPI MimeBody_Load(IMimeBody *iface, IStream *pStm) { MimeBody *This = impl_from_IMimeBody(iface); - TRACE("(%p)->(%p)\n", iface, pStm); + TRACE("(%p)->(%p)\n", This, pStm); return parse_headers(This, pStm); } static HRESULT WINAPI MimeBody_Save(IMimeBody *iface, IStream *pStm, BOOL fClearDirty) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p, %d)\n", This, pStm, fClearDirty); return E_NOTIMPL; } @@ -570,14 +584,16 @@ static HRESULT WINAPI MimeBody_GetSizeMax( IMimeBody* iface, ULARGE_INTEGER* pcbSize) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pcbSize); return E_NOTIMPL; } static HRESULT WINAPI MimeBody_InitNew( IMimeBody* iface) { - TRACE("%p->()\n", iface); + MimeBody *This = impl_from_IMimeBody(iface); + TRACE("(%p)->()\n", This); return S_OK; } @@ -586,7 +602,8 @@ static HRESULT WINAPI MimeBody_GetPropInfo( LPCSTR pszName, LPMIMEPROPINFO pInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(pszName), pInfo); return E_NOTIMPL; } @@ -595,7 +612,8 @@ static HRESULT WINAPI MimeBody_SetPropInfo( LPCSTR pszName, LPCMIMEPROPINFO pInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(pszName), pInfo); return E_NOTIMPL; } @@ -606,9 +624,15 @@ static HRESULT WINAPI MimeBody_GetProp( LPPROPVARIANT pValue) { MimeBody *This = impl_from_IMimeBody(iface); - TRACE("(%p)->(%s, %d, %p)\n", This, pszName, dwFlags, pValue); + header_t *header; + HRESULT hr; - if(!strcasecmp(pszName, "att:pri-content-type")) + TRACE("(%p)->(%s, 0x%x, %p)\n", This, debugstr_a(pszName), dwFlags, pValue); + + if(!pszName || !pValue) + return E_INVALIDARG; + + if(!lstrcmpiA(pszName, "att:pri-content-type")) { PropVariantClear(pValue); pValue->vt = VT_LPSTR; @@ -616,8 +640,13 @@ static HRESULT WINAPI MimeBody_GetProp( return S_OK; } - FIXME("stub!\n"); - return E_FAIL; + hr = find_prop(This, pszName, &header); + if(hr == S_OK) + { + PropVariantCopy(pValue, &header->value); + } + + return hr; } static HRESULT WINAPI MimeBody_SetProp( @@ -626,8 +655,61 @@ static HRESULT WINAPI MimeBody_SetProp( DWORD dwFlags, LPCPROPVARIANT pValue) { - FIXME("stub\n"); - return E_NOTIMPL; + MimeBody *This = impl_from_IMimeBody(iface); + header_t *header; + HRESULT hr; + + TRACE("(%p)->(%s, 0x%x, %p)\n", This, debugstr_a(pszName), dwFlags, pValue); + + if(!pszName || !pValue) + return E_INVALIDARG; + + hr = find_prop(This, pszName, &header); + if(hr != S_OK) + { + property_list_entry_t *prop_entry; + const property_t *prop = NULL; + + LIST_FOR_EACH_ENTRY(prop_entry, &This->new_props, property_list_entry_t, entry) + { + if(!lstrcmpiA(pszName, prop_entry->prop.name)) + { + TRACE("Found match with already added new property id %d\n", prop_entry->prop.id); + prop = &prop_entry->prop; + break; + } + } + + header = HeapAlloc(GetProcessHeap(), 0, sizeof(*header)); + if(!header) + return E_OUTOFMEMORY; + + if(!prop) + { + prop_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*prop_entry)); + if(!prop_entry) + { + HeapFree(GetProcessHeap(), 0, header); + return E_OUTOFMEMORY; + } + prop_entry->prop.name = strdupA(pszName); + prop_entry->prop.id = This->next_prop_id++; + prop_entry->prop.flags = 0; + prop_entry->prop.default_vt = pValue->vt; + list_add_tail(&This->new_props, &prop_entry->entry); + prop = &prop_entry->prop; + TRACE("Allocating new prop id %d\n", prop_entry->prop.id); + } + + header->prop = prop; + PropVariantInit(&header->value); + list_init(&header->params); + list_add_tail(&This->headers, &header->entry); + } + + PropVariantCopy(&header->value, pValue); + + return S_OK; } static HRESULT WINAPI MimeBody_AppendProp( @@ -636,7 +718,8 @@ static HRESULT WINAPI MimeBody_AppendProp( DWORD dwFlags, LPPROPVARIANT pValue) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, 0x%x, %p) stub\n", This, debugstr_a(pszName), dwFlags, pValue); return E_NOTIMPL; } @@ -644,7 +727,8 @@ static HRESULT WINAPI MimeBody_DeleteProp( IMimeBody* iface, LPCSTR pszName) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s) stub\n", This, debugstr_a(pszName)); return E_NOTIMPL; } @@ -654,7 +738,8 @@ static HRESULT WINAPI MimeBody_CopyProps( LPCSTR* prgszName, IMimePropertySet* pPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p, %p) stub\n", This, cNames, prgszName, pPropertySet); return E_NOTIMPL; } @@ -664,7 +749,8 @@ static HRESULT WINAPI MimeBody_MoveProps( LPCSTR* prgszName, IMimePropertySet* pPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p, %p) stub\n", This, cNames, prgszName, pPropertySet); return E_NOTIMPL; } @@ -673,7 +759,8 @@ static HRESULT WINAPI MimeBody_DeleteExcept( ULONG cNames, LPCSTR* prgszName) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, cNames, prgszName); return E_NOTIMPL; } @@ -684,7 +771,8 @@ static HRESULT WINAPI MimeBody_QueryProp( boolean fSubString, boolean fCaseSensitive) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %s, %d, %d) stub\n", This, debugstr_a(pszName), debugstr_a(pszCriteria), fSubString, fCaseSensitive); return E_NOTIMPL; } @@ -692,7 +780,8 @@ static HRESULT WINAPI MimeBody_GetCharset( IMimeBody* iface, LPHCHARSET phCharset) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, phCharset); *phCharset = NULL; return S_OK; } @@ -702,7 +791,8 @@ static HRESULT WINAPI MimeBody_SetCharset( HCHARSET hCharset, CSETAPPLYTYPE applytype) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p, %d) stub\n", This, hCharset, applytype); return E_NOTIMPL; } @@ -763,14 +853,14 @@ static HRESULT WINAPI MimeBody_IsContentType( { const char *pri = This->content_pri_type; if(!pri) pri = "text"; - if(strcasecmp(pri, pszPriType)) return S_FALSE; + if(lstrcmpiA(pri, pszPriType)) return S_FALSE; } if(pszSubType) { const char *sub = This->content_sub_type; if(!sub) sub = "plain"; - if(strcasecmp(sub, pszSubType)) return S_FALSE; + if(lstrcmpiA(sub, pszSubType)) return S_FALSE; } return S_OK; @@ -781,7 +871,8 @@ static HRESULT WINAPI MimeBody_BindToObject( REFIID riid, void** ppvObject) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_guid(riid), ppvObject); return E_NOTIMPL; } @@ -789,7 +880,8 @@ static HRESULT WINAPI MimeBody_Clone( IMimeBody* iface, IMimePropertySet** ppPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, ppPropertySet); return E_NOTIMPL; } @@ -798,8 +890,9 @@ static HRESULT WINAPI MimeBody_SetOption( const TYPEDID oid, LPCPROPVARIANT pValue) { + MimeBody *This = impl_from_IMimeBody(iface); HRESULT hr = E_NOTIMPL; - TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue); + TRACE("(%p)->(%08x, %p)\n", This, oid, pValue); if(pValue->vt != TYPEDID_TYPE(oid)) { @@ -813,6 +906,10 @@ static HRESULT WINAPI MimeBody_SetOption( FIXME("OID_SECURITY_HWND_OWNER (value %08x): ignoring\n", pValue->u.ulVal); hr = S_OK; break; + case OID_TRANSMIT_BODY_ENCODING: + FIXME("OID_TRANSMIT_BODY_ENCODING (value %08x): ignoring\n", pValue->u.ulVal); + hr = S_OK; + break; default: FIXME("Unhandled oid %08x\n", oid); } @@ -825,7 +922,8 @@ static HRESULT WINAPI MimeBody_GetOption( const TYPEDID oid, LPPROPVARIANT pValue) { - FIXME("(%p)->(%08x, %p): stub\n", iface, oid, pValue); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%08x, %p): stub\n", This, oid, pValue); return E_NOTIMPL; } @@ -834,7 +932,8 @@ static HRESULT WINAPI MimeBody_EnumProps( DWORD dwFlags, IMimeEnumProperties** ppEnum) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(0x%x, %p) stub\n", This, dwFlags, ppEnum); return E_NOTIMPL; } @@ -844,7 +943,7 @@ static HRESULT WINAPI MimeBody_IsType( { MimeBody *This = impl_from_IMimeBody(iface); - TRACE("(%p)->(%d)\n", iface, bodytype); + TRACE("(%p)->(%d)\n", This, bodytype); switch(bodytype) { case IBT_EMPTY: @@ -859,7 +958,8 @@ static HRESULT WINAPI MimeBody_SetDisplayName( IMimeBody* iface, LPCSTR pszDisplay) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s) stub\n", This, debugstr_a(pszDisplay)); return E_NOTIMPL; } @@ -867,7 +967,8 @@ static HRESULT WINAPI MimeBody_GetDisplayName( IMimeBody* iface, LPSTR* ppszDisplay) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, ppszDisplay); return E_NOTIMPL; } @@ -913,7 +1014,8 @@ static HRESULT WINAPI MimeBody_GetEstimatedSize( ENCODINGTYPE ietEncoding, ULONG* pcbSize) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, ietEncoding, pcbSize); return E_NOTIMPL; } @@ -922,7 +1024,8 @@ static HRESULT WINAPI MimeBody_GetDataHere( ENCODINGTYPE ietEncoding, IStream* pStream) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, ietEncoding, pStream); return E_NOTIMPL; } @@ -977,7 +1080,8 @@ static HRESULT WINAPI MimeBody_SetData( static HRESULT WINAPI MimeBody_EmptyData( IMimeBody* iface) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->() stub\n", This); return E_NOTIMPL; } @@ -985,7 +1089,8 @@ static HRESULT WINAPI MimeBody_CopyTo( IMimeBody* iface, IMimeBody* pBody) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pBody); return E_NOTIMPL; } @@ -993,7 +1098,8 @@ static HRESULT WINAPI MimeBody_GetTransmitInfo( IMimeBody* iface, LPTRANSMITINFO pTransmitInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pTransmitInfo); return E_NOTIMPL; } @@ -1002,7 +1108,8 @@ static HRESULT WINAPI MimeBody_SaveToFile( ENCODINGTYPE ietEncoding, LPCSTR pszFilePath) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %s) stub\n", This, ietEncoding, debugstr_a(pszFilePath)); return E_NOTIMPL; } @@ -1643,7 +1750,7 @@ static body_t *create_sub_body(MimeMessage *msg, IStream *pStm, BODYOFFSETS *off for(i = 0; i < count; i++) { - if(!strcasecmp(param_info[i].pszName, "boundary")) + if(!lstrcmpiA(param_info[i].pszName, "boundary")) { struct list offset_list; offset_entry_t *cur, *cursor2; @@ -1688,6 +1795,8 @@ static HRESULT WINAPI MimeMessage_Load(IMimeMessage *iface, IStream *pStm) return E_FAIL; } + empty_body_list(&This->body_tree); + IStream_AddRef(pStm); This->stream = pStm; offsets.cbBoundaryStart = offsets.cbHeaderStart = 0; @@ -2182,27 +2291,38 @@ static HRESULT WINAPI MimeMessage_SetOption( const TYPEDID oid, LPCPROPVARIANT pValue) { - HRESULT hr = E_NOTIMPL; + HRESULT hr = S_OK; TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue); + /* Message ID is checked before type. + * OID 0x4D -> 0x56 and 0x58 aren't defined but will filtered out later. + */ + if(TYPEDID_ID(oid) < TYPEDID_ID(OID_ALLOW_8BIT_HEADER) || TYPEDID_ID(oid) > TYPEDID_ID(OID_SECURITY_2KEY_CERT_BAG_64)) + { + WARN("oid (%08x) out of range\n", oid); + return MIME_E_INVALID_OPTION_ID; + } + if(pValue->vt != TYPEDID_TYPE(oid)) { WARN("Called with vartype %04x and oid %08x\n", pValue->vt, oid); - return E_INVALIDARG; + return S_OK; } switch(oid) { case OID_HIDE_TNEF_ATTACHMENTS: FIXME("OID_HIDE_TNEF_ATTACHMENTS (value %d): ignoring\n", pValue->u.boolVal); - hr = S_OK; break; case OID_SHOW_MACBINARY: FIXME("OID_SHOW_MACBINARY (value %d): ignoring\n", pValue->u.boolVal); - hr = S_OK; + break; + case OID_SAVEBODY_KEEPBOUNDARY: + FIXME("OID_SAVEBODY_KEEPBOUNDARY (value %d): ignoring\n", pValue->u.boolVal); break; default: FIXME("Unhandled oid %08x\n", oid); + hr = MIME_E_INVALID_OPTION_ID; } return hr; @@ -2526,6 +2646,8 @@ static const IMimeMessageVtbl MimeMessageVtbl = HRESULT MimeMessage_create(IUnknown *outer, void **obj) { MimeMessage *This; + MimeBody *mime_body; + body_t *root_body; TRACE("(%p, %p)\n", outer, obj); @@ -2546,6 +2668,10 @@ HRESULT MimeMessage_create(IUnknown *outer, void **obj) list_init(&This->body_tree); This->next_index = 1; + mime_body = mimebody_create(); + root_body = new_body_entry(mime_body, This->next_index++, NULL); + list_add_head(&This->body_tree, &root_body->entry); + *obj = &This->IMimeMessage_iface; return S_OK; } @@ -2976,3 +3102,127 @@ HRESULT VirtualStream_create(IUnknown *outer, void **obj) return MimeOleCreateVirtualStream((IStream **)obj); } + +/* IMimePropertySchema Interface */ +static HRESULT WINAPI propschema_QueryInterface(IMimePropertySchema *iface, REFIID riid, void **out) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), out); + + *out = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IMimePropertySchema)) + { + *out = iface; + } + else + { + FIXME("no interface for %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + IMimePropertySchema_AddRef(iface); + return S_OK; +} + +static ULONG WINAPI propschema_AddRef(IMimePropertySchema *iface) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI propschema_Release(IMimePropertySchema *iface) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) + { + HeapFree(GetProcessHeap(), 0, This); + } + + return ref; +} + +static HRESULT WINAPI propschema_RegisterProperty(IMimePropertySchema *iface, const char *name, DWORD flags, + DWORD rownumber, VARTYPE vtdefault, DWORD *propid) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %x, %d, %d, %p) stub\n", This, debugstr_a(name), flags, rownumber, vtdefault, propid); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_ModifyProperty(IMimePropertySchema *iface, const char *name, DWORD flags, + DWORD rownumber, VARTYPE vtdefault) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %x, %d, %d) stub\n", This, debugstr_a(name), flags, rownumber, vtdefault); + return S_OK; +} + +static HRESULT WINAPI propschema_GetPropertyId(IMimePropertySchema *iface, const char *name, DWORD *propid) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(name), propid); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_GetPropertyName(IMimePropertySchema *iface, DWORD propid, char **name) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%d, %p) stub\n", This, propid, name); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_RegisterAddressType(IMimePropertySchema *iface, const char *name, DWORD *adrtype) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(name), adrtype); + return E_NOTIMPL; +} + +static IMimePropertySchemaVtbl prop_schema_vtbl = +{ + propschema_QueryInterface, + propschema_AddRef, + propschema_Release, + propschema_RegisterProperty, + propschema_ModifyProperty, + propschema_GetPropertyId, + propschema_GetPropertyName, + propschema_RegisterAddressType +}; + + +HRESULT WINAPI MimeOleGetPropertySchema(IMimePropertySchema **schema) +{ + propschema *This; + + TRACE("(%p) stub\n", schema); + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); + if (!This) + return E_OUTOFMEMORY; + + This->IMimePropertySchema_iface.lpVtbl = &prop_schema_vtbl; + This->ref = 1; + + *schema = &This->IMimePropertySchema_iface; + + return S_OK; +} + +HRESULT WINAPI MimeGetAddressFormatW(REFIID riid, void *object, DWORD addr_type, + ADDRESSFORMAT addr_format, WCHAR **address) +{ + FIXME("(%s, %p, %d, %d, %p) stub\n", debugstr_guid(riid), object, addr_type, addr_format, address); + + return E_NOTIMPL; +} diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index aa7d887fcf0..c0b2e03c5e8 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -78,7 +78,7 @@ reactos/dll/win32/ieframe # Synced to WineStaging-1.9.11 reactos/dll/win32/imaadp32.acm # Synced to WineStaging-1.9.11 reactos/dll/win32/imagehlp # Synced to WineStaging-1.9.4 reactos/dll/win32/imm32 # Synced to Wine-1.7.27 -reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.4 +reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.11 reactos/dll/win32/inetmib1 # Synced to WineStaging-1.9.4 reactos/dll/win32/initpki # Synced to WineStaging-1.9.4 reactos/dll/win32/inseng # Synced to WineStaging-1.9.4