Module: wine Branch: master Commit: f5edf34c6cae2feb4626298182f24e1729b9fb24 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f5edf34c6cae2feb4626298182...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Sep 24 00:01:55 2012 +0400
mlang: Added IMLangConvertCharset stub.
---
dlls/mlang/mlang.c | 171 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 159 insertions(+), 12 deletions(-)
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index e9f48a0..b5fd0eb 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -47,6 +47,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mlang); #define CP_UNICODE 1200
static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj); +static HRESULT MLangConvertCharset_create(IUnknown *outer, void **obj); static HRESULT EnumRfc1766_create(LANGID LangId, IEnumRfc1766 **ppEnum);
static HINSTANCE instance; @@ -1297,6 +1298,7 @@ struct object_creation_info static const struct object_creation_info object_creation[] = { { &CLSID_CMultiLanguage, "CLSID_CMultiLanguage", MultiLanguage_create }, + { &CLSID_CMLangConvertCharset, "CLSID_CMLangConvertCharset", MLangConvertCharset_create } };
static HRESULT WINAPI MLANGCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppobj) @@ -2583,13 +2585,13 @@ static HRESULT WINAPI fnIMultiLanguage_GetRfc1766Info(
static HRESULT WINAPI fnIMultiLanguage_CreateConvertCharset( IMultiLanguage* iface, - UINT uiSrcCodePage, - UINT uiDstCodePage, - DWORD dwProperty, - IMLangConvertCharset** ppMLangConvertCharset) + UINT src_cp, + UINT dst_cp, + DWORD prop, + IMLangConvertCharset** convert_charset) { - FIXME("\n"); - return E_NOTIMPL; + MLang_impl *This = impl_from_IMultiLanguage(iface); + return IMultiLanguage3_CreateConvertCharset(&This->IMultiLanguage3_iface, src_cp, dst_cp, prop, convert_charset); }
static const IMultiLanguageVtbl IMultiLanguage_vtbl = @@ -2955,13 +2957,19 @@ static HRESULT WINAPI fnIMultiLanguage2_GetRfc1766Info(
static HRESULT WINAPI fnIMultiLanguage2_CreateConvertCharset( IMultiLanguage3* iface, - UINT uiSrcCodePage, - UINT uiDstCodePage, - DWORD dwProperty, - IMLangConvertCharset** ppMLangConvertCharset) + UINT src_cp, + UINT dst_cp, + DWORD prop, + IMLangConvertCharset** convert_charset) { - FIXME("\n"); - return E_NOTIMPL; + HRESULT hr; + + TRACE("(%u %u 0x%08x %p)\n", src_cp, dst_cp, prop, convert_charset); + + hr = MLangConvertCharset_create(NULL, (void**)convert_charset); + if (FAILED(hr)) return hr; + + return IMLangConvertCharset_Initialize(*convert_charset, src_cp, dst_cp, prop); }
static HRESULT WINAPI fnIMultiLanguage2_ConvertStringInIStream( @@ -3552,6 +3560,123 @@ static const IMLangLineBreakConsoleVtbl IMLangLineBreakConsole_vtbl = fnIMLangLineBreakConsole_BreakLineA };
+struct convert_charset { + IMLangConvertCharset IMLangConvertCharset_iface; + LONG ref; +}; + +static inline struct convert_charset *impl_from_IMLangConvertCharset(IMLangConvertCharset *iface) +{ + return CONTAINING_RECORD(iface, struct convert_charset, IMLangConvertCharset_iface); +} + +static HRESULT WINAPI MLangConvertCharset_QueryInterface(IMLangConvertCharset *iface, REFIID riid, void **obj) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + + TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), obj); + + if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IMLangConvertCharset)) + { + *obj = &This->IMLangConvertCharset_iface; + IMLangConvertCharset_AddRef(iface); + return S_OK; + } + + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI MLangConvertCharset_AddRef(IMLangConvertCharset *iface) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + ULONG ref = InterlockedIncrement(&This->ref); + TRACE("(%p)->(%u)\n", This, ref); + return ref; +} + +static ULONG WINAPI MLangConvertCharset_Release(IMLangConvertCharset *iface) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p)->(%u)\n", This, ref); + if (!ref) + { + HeapFree(GetProcessHeap(), 0, This); + UnlockModule(); + } + + return ref; +} + +static HRESULT WINAPI MLangConvertCharset_Initialize(IMLangConvertCharset *iface, + UINT src_cp, UINT dst_cp, DWORD prop) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%u %u 0x%08x): stub\n", This, src_cp, dst_cp, prop); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_GetSourceCodePage(IMLangConvertCharset *iface, UINT *src_cp) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p): stub\n", This, src_cp); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_GetDestinationCodePage(IMLangConvertCharset *iface, UINT *dst_cp) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p): stub\n", This, dst_cp); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_GetProperty(IMLangConvertCharset *iface, DWORD *prop) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p): stub\n", This, prop); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_DoConversion(IMLangConvertCharset *iface, BYTE *src, + UINT *src_size, BYTE *dest, UINT *dest_size) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p %p %p %p): stub\n", This, src, src_size, dest, dest_size); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_DoConversionToUnicode(IMLangConvertCharset *iface, CHAR *src, + UINT *src_size, WCHAR *dest, UINT *dest_size) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p %p %p %p): stub\n", This, src, src_size, dest, dest_size); + return E_NOTIMPL; +} + +static HRESULT WINAPI MLangConvertCharset_DoConversionFromUnicode(IMLangConvertCharset *iface, + WCHAR *src, UINT *src_size, CHAR *dest, UINT *dest_size) +{ + struct convert_charset *This = impl_from_IMLangConvertCharset(iface); + FIXME("(%p)->(%p %p %p %p): stub\n", This, src, src_size, dest, dest_size); + return E_NOTIMPL; +} + +static const IMLangConvertCharsetVtbl MLangConvertCharsetVtbl = +{ + MLangConvertCharset_QueryInterface, + MLangConvertCharset_AddRef, + MLangConvertCharset_Release, + MLangConvertCharset_Initialize, + MLangConvertCharset_GetSourceCodePage, + MLangConvertCharset_GetDestinationCodePage, + MLangConvertCharset_GetProperty, + MLangConvertCharset_DoConversion, + MLangConvertCharset_DoConversionToUnicode, + MLangConvertCharset_DoConversionFromUnicode +}; + static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj) { MLang_impl *mlang; @@ -3585,6 +3710,28 @@ static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj) return S_OK; }
+static HRESULT MLangConvertCharset_create(IUnknown *outer, void **obj) +{ + struct convert_charset *convert; + + if (outer) + return CLASS_E_NOAGGREGATION; + + *obj = NULL; + + convert = HeapAlloc(GetProcessHeap(), 0, sizeof(struct convert_charset)); + if (!convert) return E_OUTOFMEMORY; + + convert->IMLangConvertCharset_iface.lpVtbl = &MLangConvertCharsetVtbl; + convert->ref = 1; + + *obj = &convert->IMLangConvertCharset_iface; + + LockModule(); + + return S_OK; +} + /******************************************************************************/
HRESULT WINAPI DllCanUnloadNow(void)