mirror of
https://github.com/reactos/reactos.git
synced 2025-05-28 21:48:19 +00:00
[INETCOMM] Sync with Wine Staging 1.9.16. CORE-11866
svn path=/trunk/; revision=72344
This commit is contained in:
parent
e48834ab6d
commit
60cad68706
3 changed files with 228 additions and 34 deletions
|
@ -22,6 +22,6 @@ add_library(inetcomm SHARED
|
||||||
|
|
||||||
set_module_type(inetcomm win32dll)
|
set_module_type(inetcomm win32dll)
|
||||||
target_link_libraries(inetcomm uuid wine)
|
target_link_libraries(inetcomm uuid wine)
|
||||||
add_importlibs(inetcomm ole32 oleaut32 ws2_32 user32 msvcrt kernel32 ntdll)
|
add_importlibs(inetcomm ole32 oleaut32 ws2_32 user32 propsys msvcrt kernel32 ntdll)
|
||||||
add_pch(inetcomm inetcomm_private.h SOURCE)
|
add_pch(inetcomm inetcomm_private.h SOURCE)
|
||||||
add_cd_file(TARGET inetcomm DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET inetcomm DESTINATION reactos/system32 FOR all)
|
||||||
|
|
|
@ -21,6 +21,9 @@
|
||||||
|
|
||||||
#include "inetcomm_private.h"
|
#include "inetcomm_private.h"
|
||||||
|
|
||||||
|
#include <winreg.h>
|
||||||
|
#include <propvarutil.h>
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
LPCSTR name;
|
LPCSTR name;
|
||||||
|
@ -37,11 +40,16 @@ typedef struct
|
||||||
|
|
||||||
static const property_t default_props[] =
|
static const property_t default_props[] =
|
||||||
{
|
{
|
||||||
|
{"X-Newsgroup", PID_HDR_NEWSGROUP, 0, VT_LPSTR},
|
||||||
|
{"Newsgroups", PID_HDR_NEWSGROUPS, 0, VT_LPSTR},
|
||||||
{"References", PID_HDR_REFS, 0, VT_LPSTR},
|
{"References", PID_HDR_REFS, 0, VT_LPSTR},
|
||||||
{"Subject", PID_HDR_SUBJECT, 0, VT_LPSTR},
|
{"Subject", PID_HDR_SUBJECT, 0, VT_LPSTR},
|
||||||
{"From", PID_HDR_FROM, MPF_ADDRESS, VT_LPSTR},
|
{"From", PID_HDR_FROM, MPF_ADDRESS, VT_LPSTR},
|
||||||
{"Message-ID", PID_HDR_MESSAGEID, 0, VT_LPSTR},
|
{"Message-ID", PID_HDR_MESSAGEID, 0, VT_LPSTR},
|
||||||
{"Return-Path", PID_HDR_RETURNPATH, MPF_ADDRESS, VT_LPSTR},
|
{"Return-Path", PID_HDR_RETURNPATH, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
{"Rr", PID_HDR_RR, 0, VT_LPSTR},
|
||||||
|
{"Return-Receipt-To", PID_HDR_RETRCPTO, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
{"Apparently-To", PID_HDR_APPARTO, MPF_ADDRESS, VT_LPSTR},
|
||||||
{"Date", PID_HDR_DATE, 0, VT_LPSTR},
|
{"Date", PID_HDR_DATE, 0, VT_LPSTR},
|
||||||
{"Received", PID_HDR_RECEIVED, 0, VT_LPSTR},
|
{"Received", PID_HDR_RECEIVED, 0, VT_LPSTR},
|
||||||
{"Reply-To", PID_HDR_REPLYTO, MPF_ADDRESS, VT_LPSTR},
|
{"Reply-To", PID_HDR_REPLYTO, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
@ -51,11 +59,61 @@ static const property_t default_props[] =
|
||||||
{"Content-Type", PID_HDR_CNTTYPE, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
|
{"Content-Type", PID_HDR_CNTTYPE, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
|
||||||
{"Content-Transfer-Encoding", PID_HDR_CNTXFER, MPF_MIME, VT_LPSTR},
|
{"Content-Transfer-Encoding", PID_HDR_CNTXFER, MPF_MIME, VT_LPSTR},
|
||||||
{"Content-ID", PID_HDR_CNTID, MPF_MIME, VT_LPSTR},
|
{"Content-ID", PID_HDR_CNTID, MPF_MIME, VT_LPSTR},
|
||||||
|
{"Content-Description", PID_HDR_CNTDESC, MPF_MIME, VT_LPSTR},
|
||||||
{"Content-Disposition", PID_HDR_CNTDISP, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
|
{"Content-Disposition", PID_HDR_CNTDISP, MPF_MIME | MPF_HASPARAMS, VT_LPSTR},
|
||||||
|
{"Content-Base", PID_HDR_CNTBASE, MPF_MIME, VT_LPSTR},
|
||||||
|
{"Content-Location", PID_HDR_CNTLOC, MPF_MIME, VT_LPSTR},
|
||||||
{"To", PID_HDR_TO, MPF_ADDRESS, VT_LPSTR},
|
{"To", PID_HDR_TO, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
{"Path", PID_HDR_PATH, 0, VT_LPSTR},
|
||||||
|
{"Followup-To", PID_HDR_FOLLOWUPTO, 0, VT_LPSTR},
|
||||||
|
{"Expires", PID_HDR_EXPIRES, 0, VT_LPSTR},
|
||||||
{"Cc", PID_HDR_CC, MPF_ADDRESS, VT_LPSTR},
|
{"Cc", PID_HDR_CC, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
{"Control", PID_HDR_CONTROL, 0, VT_LPSTR},
|
||||||
|
{"Distribution", PID_HDR_DISTRIB, 0, VT_LPSTR},
|
||||||
|
{"Keywords", PID_HDR_KEYWORDS, 0, VT_LPSTR},
|
||||||
|
{"Summary", PID_HDR_SUMMARY, 0, VT_LPSTR},
|
||||||
|
{"Approved", PID_HDR_APPROVED, 0, VT_LPSTR},
|
||||||
|
{"Lines", PID_HDR_LINES, 0, VT_LPSTR},
|
||||||
|
{"Xref", PID_HDR_XREF, 0, VT_LPSTR},
|
||||||
|
{"Organization", PID_HDR_ORG, 0, VT_LPSTR},
|
||||||
|
{"X-Newsreader", PID_HDR_XNEWSRDR, 0, VT_LPSTR},
|
||||||
|
{"X-Priority", PID_HDR_XPRI, 0, VT_LPSTR},
|
||||||
|
{"X-MSMail-Priority", PID_HDR_XMSPRI, 0, VT_LPSTR},
|
||||||
|
{"par:content-disposition:filename", PID_PAR_FILENAME, 0, VT_LPSTR},
|
||||||
|
{"par:content-type:boundary", PID_PAR_BOUNDARY, 0, VT_LPSTR},
|
||||||
|
{"par:content-type:charset", PID_PAR_CHARSET, 0, VT_LPSTR},
|
||||||
|
{"par:content-type:name", PID_PAR_NAME, 0, VT_LPSTR},
|
||||||
|
{"att:filename", PID_ATT_FILENAME, 0, VT_LPSTR},
|
||||||
|
{"att:pri-content-type", PID_ATT_PRITYPE, 0, VT_LPSTR},
|
||||||
|
{"att:sub-content-type", PID_ATT_SUBTYPE, 0, VT_LPSTR},
|
||||||
|
{"att:illegal-lines", PID_ATT_ILLEGAL, 0, VT_LPSTR},
|
||||||
|
{"att:rendered", PID_ATT_RENDERED, 0, VT_LPSTR},
|
||||||
|
{"att:sent-time", PID_ATT_SENTTIME, 0, VT_LPSTR},
|
||||||
|
{"att:priority", PID_ATT_PRIORITY, 0, VT_LPSTR},
|
||||||
|
{"Comment", PID_HDR_COMMENT, 0, VT_LPSTR},
|
||||||
|
{"Encoding", PID_HDR_ENCODING, 0, VT_LPSTR},
|
||||||
|
{"Encrypted", PID_HDR_ENCRYPTED, 0, VT_LPSTR},
|
||||||
|
{"X-Offsets", PID_HDR_OFFSETS, 0, VT_LPSTR},
|
||||||
|
{"X-Unsent", PID_HDR_XUNSENT, 0, VT_LPSTR},
|
||||||
|
{"X-ArticleId", PID_HDR_ARTICLEID, 0, VT_LPSTR},
|
||||||
{"Sender", PID_HDR_SENDER, MPF_ADDRESS, VT_LPSTR},
|
{"Sender", PID_HDR_SENDER, MPF_ADDRESS, VT_LPSTR},
|
||||||
|
{"att:athena-server", PID_ATT_SERVER, 0, VT_LPSTR},
|
||||||
|
{"att:athena-account-id", PID_ATT_ACCOUNT, 0, VT_LPSTR},
|
||||||
|
{"att:athena-pop3-uidl", PID_ATT_UIDL, 0, VT_LPSTR},
|
||||||
|
{"att:athena-store-msgid", PID_ATT_STOREMSGID, 0, VT_LPSTR},
|
||||||
|
{"att:athena-user-name", PID_ATT_USERNAME, 0, VT_LPSTR},
|
||||||
|
{"att:athena-forward-to", PID_ATT_FORWARDTO, 0, VT_LPSTR},
|
||||||
|
{"att:athena-store-fdrid", PID_ATT_STOREFOLDERID,0, VT_LPSTR},
|
||||||
|
{"att:athena-ghosted", PID_ATT_GHOSTED, 0, VT_LPSTR},
|
||||||
|
{"att:athena-uncachedsize", PID_ATT_UNCACHEDSIZE, 0, VT_LPSTR},
|
||||||
|
{"att:athena-combined", PID_ATT_COMBINED, 0, VT_LPSTR},
|
||||||
|
{"att:auto-inlined", PID_ATT_AUTOINLINED, 0, VT_LPSTR},
|
||||||
|
{"Disposition-Notification-To", PID_HDR_DISP_NOTIFICATION_TO, 0, VT_LPSTR},
|
||||||
|
{"par:Content-Type:reply-type", PID_PAR_REPLYTYPE, 0, VT_LPSTR},
|
||||||
|
{"par:Content-Type:format", PID_PAR_FORMAT , 0, VT_LPSTR},
|
||||||
|
{"att:format", PID_ATT_FORMAT , 0, VT_LPSTR},
|
||||||
{"In-Reply-To", PID_HDR_INREPLYTO, 0, VT_LPSTR},
|
{"In-Reply-To", PID_HDR_INREPLYTO, 0, VT_LPSTR},
|
||||||
|
{"att:athena-account-name", PID_ATT_ACCOUNTNAME, 0, VT_LPSTR},
|
||||||
{NULL, 0, 0, 0}
|
{NULL, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -478,7 +536,15 @@ static HRESULT find_prop(MimeBody *body, const char *name, header_t **prop)
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY(header, &body->headers, header_t, entry)
|
LIST_FOR_EACH_ENTRY(header, &body->headers, header_t, entry)
|
||||||
{
|
{
|
||||||
if(!lstrcmpiA(name, header->prop->name))
|
if(ISPIDSTR(name))
|
||||||
|
{
|
||||||
|
if(STRTOPID(name) == header->prop->id)
|
||||||
|
{
|
||||||
|
*prop = header;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(!lstrcmpiA(name, header->prop->name))
|
||||||
{
|
{
|
||||||
*prop = header;
|
*prop = header;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -488,6 +554,33 @@ static HRESULT find_prop(MimeBody *body, const char *name, header_t **prop)
|
||||||
return MIME_E_NOT_FOUND;
|
return MIME_E_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const property_t *find_default_prop(const char *name)
|
||||||
|
{
|
||||||
|
const property_t *prop_def = NULL;
|
||||||
|
|
||||||
|
for(prop_def = default_props; prop_def->name; prop_def++)
|
||||||
|
{
|
||||||
|
if(ISPIDSTR(name))
|
||||||
|
{
|
||||||
|
if(STRTOPID(name) == prop_def->id)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(!lstrcmpiA(name, prop_def->name))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(prop_def->id)
|
||||||
|
TRACE("%s: found match with default property id %d\n", prop_def->name, prop_def->id);
|
||||||
|
else
|
||||||
|
prop_def = NULL;
|
||||||
|
|
||||||
|
return prop_def;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MimeBody_QueryInterface(IMimeBody* iface,
|
static HRESULT WINAPI MimeBody_QueryInterface(IMimeBody* iface,
|
||||||
REFIID riid,
|
REFIID riid,
|
||||||
void** ppvObject)
|
void** ppvObject)
|
||||||
|
@ -603,8 +696,42 @@ static HRESULT WINAPI MimeBody_GetPropInfo(
|
||||||
LPMIMEPROPINFO pInfo)
|
LPMIMEPROPINFO pInfo)
|
||||||
{
|
{
|
||||||
MimeBody *This = impl_from_IMimeBody(iface);
|
MimeBody *This = impl_from_IMimeBody(iface);
|
||||||
FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(pszName), pInfo);
|
header_t *header;
|
||||||
return E_NOTIMPL;
|
HRESULT hr;
|
||||||
|
DWORD supported = PIM_PROPID | PIM_VTDEFAULT;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%s, %p) semi-stub\n", This, debugstr_a(pszName), pInfo);
|
||||||
|
|
||||||
|
if(!pszName || !pInfo)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
TRACE("mask 0x%04x\n", pInfo->dwMask);
|
||||||
|
|
||||||
|
if(pInfo->dwMask & ~supported)
|
||||||
|
FIXME("Unsupported mask flags 0x%04x\n", pInfo->dwMask & ~supported);
|
||||||
|
|
||||||
|
hr = find_prop(This, pszName, &header);
|
||||||
|
if(hr == S_OK)
|
||||||
|
{
|
||||||
|
if(pInfo->dwMask & PIM_CHARSET)
|
||||||
|
pInfo->hCharset = 0;
|
||||||
|
if(pInfo->dwMask & PIM_FLAGS)
|
||||||
|
pInfo->dwFlags = 0x00000000;
|
||||||
|
if(pInfo->dwMask & PIM_ROWNUMBER)
|
||||||
|
pInfo->dwRowNumber = 0;
|
||||||
|
if(pInfo->dwMask & PIM_ENCODINGTYPE)
|
||||||
|
pInfo->ietEncoding = 0;
|
||||||
|
if(pInfo->dwMask & PIM_VALUES)
|
||||||
|
pInfo->cValues = 0;
|
||||||
|
if(pInfo->dwMask & PIM_PROPID)
|
||||||
|
pInfo->dwPropId = header->prop->id;
|
||||||
|
if(pInfo->dwMask & PIM_VTDEFAULT)
|
||||||
|
pInfo->vtDefault = header->prop->default_vt;
|
||||||
|
if(pInfo->dwMask & PIM_VTCURRENT)
|
||||||
|
pInfo->vtCurrent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MimeBody_SetPropInfo(
|
static HRESULT WINAPI MimeBody_SetPropInfo(
|
||||||
|
@ -632,7 +759,7 @@ static HRESULT WINAPI MimeBody_GetProp(
|
||||||
if(!pszName || !pValue)
|
if(!pszName || !pValue)
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if(!lstrcmpiA(pszName, "att:pri-content-type"))
|
if(!ISPIDSTR(pszName) && !lstrcmpiA(pszName, "att:pri-content-type"))
|
||||||
{
|
{
|
||||||
PropVariantClear(pValue);
|
PropVariantClear(pValue);
|
||||||
pValue->vt = VT_LPSTR;
|
pValue->vt = VT_LPSTR;
|
||||||
|
@ -643,7 +770,11 @@ static HRESULT WINAPI MimeBody_GetProp(
|
||||||
hr = find_prop(This, pszName, &header);
|
hr = find_prop(This, pszName, &header);
|
||||||
if(hr == S_OK)
|
if(hr == S_OK)
|
||||||
{
|
{
|
||||||
PropVariantCopy(pValue, &header->value);
|
TRACE("type %d->%d\n", header->value.vt, pValue->vt);
|
||||||
|
|
||||||
|
hr = PropVariantChangeType(pValue, &header->value, 0, pValue->vt);
|
||||||
|
if(FAILED(hr))
|
||||||
|
FIXME("Conversion not currently supported (%d->%d)\n", header->value.vt, pValue->vt);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -672,7 +803,16 @@ static HRESULT WINAPI MimeBody_SetProp(
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY(prop_entry, &This->new_props, property_list_entry_t, entry)
|
LIST_FOR_EACH_ENTRY(prop_entry, &This->new_props, property_list_entry_t, entry)
|
||||||
{
|
{
|
||||||
if(!lstrcmpiA(pszName, prop_entry->prop.name))
|
if(ISPIDSTR(pszName))
|
||||||
|
{
|
||||||
|
if(STRTOPID(pszName) == prop_entry->prop.id)
|
||||||
|
{
|
||||||
|
TRACE("Found match with already added new property id %d\n", prop_entry->prop.id);
|
||||||
|
prop = &prop_entry->prop;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(!lstrcmpiA(pszName, prop_entry->prop.name))
|
||||||
{
|
{
|
||||||
TRACE("Found match with already added new property id %d\n", prop_entry->prop.id);
|
TRACE("Found match with already added new property id %d\n", prop_entry->prop.id);
|
||||||
prop = &prop_entry->prop;
|
prop = &prop_entry->prop;
|
||||||
|
@ -686,14 +826,33 @@ static HRESULT WINAPI MimeBody_SetProp(
|
||||||
|
|
||||||
if(!prop)
|
if(!prop)
|
||||||
{
|
{
|
||||||
|
const property_t *prop_def = NULL;
|
||||||
prop_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*prop_entry));
|
prop_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*prop_entry));
|
||||||
if(!prop_entry)
|
if(!prop_entry)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, header);
|
HeapFree(GetProcessHeap(), 0, header);
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prop_def = find_default_prop(pszName);
|
||||||
|
if(prop_def)
|
||||||
|
{
|
||||||
|
prop_entry->prop.name = strdupA(prop_def->name);
|
||||||
|
prop_entry->prop.id = prop_def->id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(ISPIDSTR(pszName))
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, prop_entry);
|
||||||
|
HeapFree(GetProcessHeap(), 0, header);
|
||||||
|
return MIME_E_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
prop_entry->prop.name = strdupA(pszName);
|
prop_entry->prop.name = strdupA(pszName);
|
||||||
prop_entry->prop.id = This->next_prop_id++;
|
prop_entry->prop.id = This->next_prop_id++;
|
||||||
|
}
|
||||||
|
|
||||||
prop_entry->prop.flags = 0;
|
prop_entry->prop.flags = 0;
|
||||||
prop_entry->prop.default_vt = pValue->vt;
|
prop_entry->prop.default_vt = pValue->vt;
|
||||||
list_add_tail(&This->new_props, &prop_entry->entry);
|
list_add_tail(&This->new_props, &prop_entry->entry);
|
||||||
|
@ -728,8 +887,27 @@ static HRESULT WINAPI MimeBody_DeleteProp(
|
||||||
LPCSTR pszName)
|
LPCSTR pszName)
|
||||||
{
|
{
|
||||||
MimeBody *This = impl_from_IMimeBody(iface);
|
MimeBody *This = impl_from_IMimeBody(iface);
|
||||||
FIXME("(%p)->(%s) stub\n", This, debugstr_a(pszName));
|
header_t *cursor;
|
||||||
return E_NOTIMPL;
|
BOOL found;
|
||||||
|
|
||||||
|
TRACE("(%p)->(%s) stub\n", This, debugstr_a(pszName));
|
||||||
|
|
||||||
|
LIST_FOR_EACH_ENTRY(cursor, &This->headers, header_t, entry)
|
||||||
|
{
|
||||||
|
if(ISPIDSTR(pszName))
|
||||||
|
found = STRTOPID(pszName) == cursor->prop->id;
|
||||||
|
else
|
||||||
|
found = !lstrcmpiA(pszName, cursor->prop->name);
|
||||||
|
|
||||||
|
if(found)
|
||||||
|
{
|
||||||
|
list_remove(&cursor->entry);
|
||||||
|
HeapFree(GetProcessHeap(), 0, cursor);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MIME_E_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI MimeBody_CopyProps(
|
static HRESULT WINAPI MimeBody_CopyProps(
|
||||||
|
@ -1120,6 +1298,9 @@ static HRESULT WINAPI MimeBody_GetHandle(
|
||||||
MimeBody *This = impl_from_IMimeBody(iface);
|
MimeBody *This = impl_from_IMimeBody(iface);
|
||||||
TRACE("(%p)->(%p)\n", iface, phBody);
|
TRACE("(%p)->(%p)\n", iface, phBody);
|
||||||
|
|
||||||
|
if(!phBody)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
*phBody = This->handle;
|
*phBody = This->handle;
|
||||||
return This->handle ? S_OK : MIME_E_NO_DATA;
|
return This->handle ? S_OK : MIME_E_NO_DATA;
|
||||||
}
|
}
|
||||||
|
@ -1625,6 +1806,8 @@ static body_t *new_body_entry(MimeBody *mime_body, DWORD index, body_t *parent)
|
||||||
body->index = index;
|
body->index = index;
|
||||||
list_init(&body->children);
|
list_init(&body->children);
|
||||||
body->parent = parent;
|
body->parent = parent;
|
||||||
|
|
||||||
|
mime_body->handle = UlongToHandle(body->index);
|
||||||
}
|
}
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
@ -1888,7 +2071,7 @@ static HRESULT WINAPI MimeMessage_Commit(
|
||||||
DWORD dwFlags)
|
DWORD dwFlags)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(0x%x)\n", iface, dwFlags);
|
FIXME("(%p)->(0x%x)\n", iface, dwFlags);
|
||||||
return E_NOTIMPL;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1976,7 +2159,10 @@ static HRESULT get_body(MimeMessage *msg, BODYLOCATION location, HBODY pivot, bo
|
||||||
switch(location)
|
switch(location)
|
||||||
{
|
{
|
||||||
case IBL_PARENT:
|
case IBL_PARENT:
|
||||||
|
if(body->parent)
|
||||||
*out = body->parent;
|
*out = body->parent;
|
||||||
|
else
|
||||||
|
hr = MIME_E_NOT_FOUND;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IBL_FIRST:
|
case IBL_FIRST:
|
||||||
|
@ -2040,6 +2226,11 @@ static HRESULT WINAPI MimeMessage_GetBody(IMimeMessage *iface, BODYLOCATION loca
|
||||||
|
|
||||||
TRACE("(%p)->(%d, %p, %p)\n", iface, location, hPivot, phBody);
|
TRACE("(%p)->(%d, %p, %p)\n", iface, location, hPivot, phBody);
|
||||||
|
|
||||||
|
if(!phBody)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
*phBody = NULL;
|
||||||
|
|
||||||
hr = get_body(This, location, hPivot, &body);
|
hr = get_body(This, location, hPivot, &body);
|
||||||
|
|
||||||
if(hr == S_OK) *phBody = UlongToHandle(body->index);
|
if(hr == S_OK) *phBody = UlongToHandle(body->index);
|
||||||
|
@ -2320,6 +2511,9 @@ static HRESULT WINAPI MimeMessage_SetOption(
|
||||||
case OID_SAVEBODY_KEEPBOUNDARY:
|
case OID_SAVEBODY_KEEPBOUNDARY:
|
||||||
FIXME("OID_SAVEBODY_KEEPBOUNDARY (value %d): ignoring\n", pValue->u.boolVal);
|
FIXME("OID_SAVEBODY_KEEPBOUNDARY (value %d): ignoring\n", pValue->u.boolVal);
|
||||||
break;
|
break;
|
||||||
|
case OID_CLEANUP_TREE_ON_SAVE:
|
||||||
|
FIXME("OID_CLEANUP_TREE_ON_SAVE (value %d): ignoring\n", pValue->u.boolVal);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled oid %08x\n", oid);
|
FIXME("Unhandled oid %08x\n", oid);
|
||||||
hr = MIME_E_INVALID_OPTION_ID;
|
hr = MIME_E_INVALID_OPTION_ID;
|
||||||
|
|
|
@ -78,7 +78,7 @@ reactos/dll/win32/ieframe # Synced to WineStaging-1.9.16
|
||||||
reactos/dll/win32/imaadp32.acm # 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.11
|
reactos/dll/win32/imagehlp # Synced to WineStaging-1.9.11
|
||||||
reactos/dll/win32/imm32 # Synced to Wine-1.7.27
|
reactos/dll/win32/imm32 # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.11
|
reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.16
|
||||||
reactos/dll/win32/inetmib1 # Synced to WineStaging-1.9.11
|
reactos/dll/win32/inetmib1 # Synced to WineStaging-1.9.11
|
||||||
reactos/dll/win32/initpki # Synced to WineStaging-1.9.11
|
reactos/dll/win32/initpki # Synced to WineStaging-1.9.11
|
||||||
reactos/dll/win32/inseng # Synced to WineStaging-1.9.11
|
reactos/dll/win32/inseng # Synced to WineStaging-1.9.11
|
||||||
|
|
Loading…
Reference in a new issue