ReactOS 0.4.17-dev-357-ga8f14ff
mimeintl.c
Go to the documentation of this file.
1/*
2 * MIME OLE International interface
3 *
4 * Copyright 2008 Huw Davies for CodeWeavers
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#define COBJMACROS
22
23#include <stdarg.h>
24#include <stdio.h>
25
26#include "windef.h"
27#include "winbase.h"
28#include "winuser.h"
29#include "winnls.h"
30#include "objbase.h"
31#include "ole2.h"
32#include "mimeole.h"
33#include "mlang.h"
34
35#include "wine/list.h"
36#include "wine/debug.h"
37
38#include "inetcomm_private.h"
39
41
42typedef struct
43{
44 struct list entry;
45 INETCSETINFO cs_info;
47
48typedef struct
49{
50 IMimeInternational IMimeInternational_iface;
53
54 struct list charsets;
58
59static inline internat_impl *impl_from_IMimeInternational(IMimeInternational *iface)
60{
61 return CONTAINING_RECORD(iface, internat_impl, IMimeInternational_iface);
62}
63
64static inline HRESULT get_mlang(IMultiLanguage **ml)
65{
66 return CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
67 &IID_IMultiLanguage, (void **)ml);
68}
69
70static HRESULT WINAPI MimeInternat_QueryInterface( IMimeInternational *iface, REFIID riid, LPVOID *ppobj )
71{
73 IsEqualGUID(riid, &IID_IMimeInternational))
74 {
75 IMimeInternational_AddRef( iface );
76 *ppobj = iface;
77 return S_OK;
78 }
79
80 FIXME("interface %s not implemented\n", debugstr_guid(riid));
81 return E_NOINTERFACE;
82}
83
84static ULONG WINAPI MimeInternat_AddRef( IMimeInternational *iface )
85{
87 return InterlockedIncrement(&This->refs);
88}
89
90static ULONG WINAPI MimeInternat_Release( IMimeInternational *iface )
91{
93 ULONG refs;
94
95 refs = InterlockedDecrement(&This->refs);
96 if (!refs)
97 {
98 charset_entry *charset, *cursor2;
99
101 {
102 list_remove(&charset->entry);
104 }
105 This->cs.DebugInfo->Spare[0] = 0;
108 }
109
110 return refs;
111}
112
113static HRESULT WINAPI MimeInternat_SetDefaultCharset(IMimeInternational *iface, HCHARSET hCharset)
114{
116
117 TRACE("(%p)->(%p)\n", iface, hCharset);
118
119 if(hCharset == NULL) return E_INVALIDARG;
120 /* FIXME check hCharset is valid */
121
122 InterlockedExchangePointer(&This->default_charset, hCharset);
123
124 return S_OK;
125}
126
127static HRESULT WINAPI MimeInternat_GetDefaultCharset(IMimeInternational *iface, LPHCHARSET phCharset)
128{
130 HRESULT hr = S_OK;
131
132 TRACE("(%p)->(%p)\n", iface, phCharset);
133
134 if(This->default_charset == NULL)
135 {
136 HCHARSET hcs;
137 hr = IMimeInternational_GetCodePageCharset(iface, GetACP(), CHARSET_BODY, &hcs);
138 if(SUCCEEDED(hr))
139 InterlockedCompareExchangePointer(&This->default_charset, hcs, NULL);
140 }
141 *phCharset = This->default_charset;
142
143 return hr;
144}
145
146static HRESULT mlang_getcodepageinfo(UINT cp, MIMECPINFO *mlang_cp_info)
147{
148 HRESULT hr;
149 IMultiLanguage *ml;
150
151 hr = get_mlang(&ml);
152
153 if(SUCCEEDED(hr))
154 {
155 hr = IMultiLanguage_GetCodePageInfo(ml, cp, mlang_cp_info);
156 IMultiLanguage_Release(ml);
157 }
158 return hr;
159}
160
161static HRESULT WINAPI MimeInternat_GetCodePageCharset(IMimeInternational *iface, CODEPAGEID cpiCodePage,
162 CHARSETTYPE ctCsetType,
163 LPHCHARSET phCharset)
164{
165 HRESULT hr;
166 MIMECPINFO mlang_cp_info;
167
168 TRACE("(%p)->(%ld, %d, %p)\n", iface, cpiCodePage, ctCsetType, phCharset);
169
170 *phCharset = NULL;
171
172 hr = mlang_getcodepageinfo(cpiCodePage, &mlang_cp_info);
173 if(SUCCEEDED(hr))
174 {
175 const WCHAR *charset_nameW = NULL;
176 char *charset_name;
177 DWORD len;
178
179 switch(ctCsetType)
180 {
181 case CHARSET_BODY:
182 charset_nameW = mlang_cp_info.wszBodyCharset;
183 break;
184 case CHARSET_HEADER:
185 charset_nameW = mlang_cp_info.wszHeaderCharset;
186 break;
187 case CHARSET_WEB:
188 charset_nameW = mlang_cp_info.wszWebCharset;
189 break;
190 default:
191 return MIME_E_INVALID_CHARSET_TYPE;
192 }
193 len = WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, NULL, 0, NULL, NULL);
194 charset_name = HeapAlloc(GetProcessHeap(), 0, len);
195 WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, charset_name, len, NULL, NULL);
196 hr = IMimeInternational_FindCharset(iface, charset_name, phCharset);
197 HeapFree(GetProcessHeap(), 0, charset_name);
198 }
199 return hr;
200}
201
202static HRESULT mlang_getcsetinfo(const char *charset, MIMECSETINFO *mlang_info)
203{
205 BSTR bstr = SysAllocStringLen(NULL, len - 1);
206 HRESULT hr;
207 IMultiLanguage *ml;
208
209 MultiByteToWideChar(CP_ACP, 0, charset, -1, bstr, len);
210
211 hr = get_mlang(&ml);
212
213 if(SUCCEEDED(hr))
214 {
215 hr = IMultiLanguage_GetCharsetInfo(ml, bstr, mlang_info);
216 IMultiLanguage_Release(ml);
217 }
218 SysFreeString(bstr);
219 if(FAILED(hr)) hr = MIME_E_NOT_FOUND;
220 return hr;
221}
222
223static HCHARSET add_charset(struct list *list, MIMECSETINFO *mlang_info, HCHARSET handle)
224{
226
227 WideCharToMultiByte(CP_ACP, 0, mlang_info->wszCharset, -1,
228 charset->cs_info.szName, sizeof(charset->cs_info.szName), NULL, NULL);
229 charset->cs_info.cpiWindows = mlang_info->uiCodePage;
230 charset->cs_info.cpiInternet = mlang_info->uiInternetEncoding;
231 charset->cs_info.hCharset = handle;
232 charset->cs_info.dwReserved1 = 0;
233 list_add_head(list, &charset->entry);
234
235 return charset->cs_info.hCharset;
236}
237
238static HRESULT WINAPI MimeInternat_FindCharset(IMimeInternational *iface, LPCSTR pszCharset,
239 LPHCHARSET phCharset)
240{
242 HRESULT hr = MIME_E_NOT_FOUND;
244
245 TRACE("(%p)->(%s, %p)\n", iface, debugstr_a(pszCharset), phCharset);
246
247 *phCharset = NULL;
248
250
252 {
253 if(!lstrcmpiA(charset->cs_info.szName, pszCharset))
254 {
255 *phCharset = charset->cs_info.hCharset;
256 hr = S_OK;
257 break;
258 }
259 }
260
261 if(hr == MIME_E_NOT_FOUND)
262 {
263 MIMECSETINFO mlang_info;
264
266 hr = mlang_getcsetinfo(pszCharset, &mlang_info);
268
269 if(SUCCEEDED(hr))
270 *phCharset = add_charset(&This->charsets, &mlang_info,
271 UlongToHandle(InterlockedIncrement(&This->next_charset_handle)));
272 }
273
275 return hr;
276}
277
278static HRESULT WINAPI MimeInternat_GetCharsetInfo(IMimeInternational *iface, HCHARSET hCharset,
279 LPINETCSETINFO pCsetInfo)
280{
282 HRESULT hr = MIME_E_INVALID_HANDLE;
284
285 TRACE("(%p)->(%p, %p)\n", iface, hCharset, pCsetInfo);
286
288
290 {
291 if(charset->cs_info.hCharset == hCharset)
292 {
293 *pCsetInfo = charset->cs_info;
294 hr = S_OK;
295 break;
296 }
297 }
298
300
301 return hr;
302}
303
304static HRESULT WINAPI MimeInternat_GetCodePageInfo(IMimeInternational *iface, CODEPAGEID cpiCodePage,
305 LPCODEPAGEINFO pCodePageInfo)
306{
307 FIXME("stub\n");
308 return E_NOTIMPL;
309}
310
311static HRESULT WINAPI MimeInternat_CanConvertCodePages(IMimeInternational *iface, CODEPAGEID cpiSource,
312 CODEPAGEID cpiDest)
313{
314 HRESULT hr;
315 IMultiLanguage *ml;
316
317 TRACE("(%p)->(%ld, %ld)\n", iface, cpiSource, cpiDest);
318
319 /* Could call mlang.IsConvertINetStringAvailable() to avoid the COM overhead if need be. */
320
321 hr = get_mlang(&ml);
322 if(SUCCEEDED(hr))
323 {
324 hr = IMultiLanguage_IsConvertible(ml, cpiSource, cpiDest);
325 IMultiLanguage_Release(ml);
326 }
327
328 return hr;
329}
330
331static HRESULT WINAPI MimeInternat_DecodeHeader(IMimeInternational *iface, HCHARSET hCharset,
332 LPCSTR pszData,
333 LPPROPVARIANT pDecoded,
334 LPRFC1522INFO pRfc1522Info)
335{
336 FIXME("stub\n");
337 return E_NOTIMPL;
338}
339
340static HRESULT WINAPI MimeInternat_EncodeHeader(IMimeInternational *iface, HCHARSET hCharset,
341 LPPROPVARIANT pData,
342 LPSTR *ppszEncoded,
343 LPRFC1522INFO pRfc1522Info)
344{
345 FIXME("stub\n");
346 return E_NOTIMPL;
347}
348
349static HRESULT WINAPI MimeInternat_ConvertBuffer(IMimeInternational *iface, CODEPAGEID cpiSource,
350 CODEPAGEID cpiDest, LPBLOB pIn, LPBLOB pOut,
351 ULONG *pcbRead)
352{
353 HRESULT hr;
354 IMultiLanguage *ml;
355
356 TRACE("(%p)->(%ld, %ld, %p, %p, %p)\n", iface, cpiSource, cpiDest, pIn, pOut, pcbRead);
357
358 *pcbRead = 0;
359 pOut->cbSize = 0;
360
361 /* Could call mlang.ConvertINetString() to avoid the COM overhead if need be. */
362
363 hr = get_mlang(&ml);
364 if(SUCCEEDED(hr))
365 {
366 DWORD mode = 0;
367 UINT in_size = pIn->cbSize, out_size;
368
369 hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, pIn->pBlobData, &in_size,
370 NULL, &out_size);
371 if(hr == S_OK) /* S_FALSE means the conversion could not be performed */
372 {
374 if(!pOut->pBlobData)
376 else
377 {
378 mode = 0;
379 in_size = pIn->cbSize;
380 hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, pIn->pBlobData, &in_size,
381 pOut->pBlobData, &out_size);
382
383 if(hr == S_OK)
384 {
385 *pcbRead = in_size;
386 pOut->cbSize = out_size;
387 }
388 else
390 }
391 }
392 IMultiLanguage_Release(ml);
393 }
394
395 return hr;
396}
397
398static HRESULT WINAPI MimeInternat_ConvertString(IMimeInternational *iface, CODEPAGEID cpiSource,
399 CODEPAGEID cpiDest, LPPROPVARIANT pIn,
400 LPPROPVARIANT pOut)
401{
402 HRESULT hr;
403 int src_len;
404 IMultiLanguage *ml;
405
406 TRACE("(%p)->(%ld, %ld, %p %p)\n", iface, cpiSource, cpiDest, pIn, pOut);
407
408 switch(pIn->vt)
409 {
410 case VT_LPSTR:
411 if(cpiSource == CP_UNICODE) cpiSource = GetACP();
412 src_len = strlen(pIn->pszVal);
413 break;
414 case VT_LPWSTR:
415 cpiSource = CP_UNICODE;
416 src_len = lstrlenW(pIn->pwszVal) * sizeof(WCHAR);
417 break;
418 default:
419 return E_INVALIDARG;
420 }
421
422 hr = get_mlang(&ml);
423 if(SUCCEEDED(hr))
424 {
425 DWORD mode = 0;
426 UINT in_size = src_len, out_size;
427
428 hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, (BYTE*)pIn->pszVal, &in_size,
429 NULL, &out_size);
430 if(hr == S_OK) /* S_FALSE means the conversion could not be performed */
431 {
432 out_size += (cpiDest == CP_UNICODE) ? sizeof(WCHAR) : sizeof(char);
433
434 pOut->pszVal = CoTaskMemAlloc(out_size);
435 if(!pOut->pszVal)
437 else
438 {
439 mode = 0;
440 in_size = src_len;
441 hr = IMultiLanguage_ConvertString(ml, &mode, cpiSource, cpiDest, (BYTE*)pIn->pszVal, &in_size,
442 (BYTE*)pOut->pszVal, &out_size);
443
444 if(hr == S_OK)
445 {
446 if(cpiDest == CP_UNICODE)
447 {
448 pOut->pwszVal[out_size / sizeof(WCHAR)] = 0;
449 pOut->vt = VT_LPWSTR;
450 }
451 else
452 {
453 pOut->pszVal[out_size] = '\0';
454 pOut->vt = VT_LPSTR;
455 }
456 }
457 else
458 CoTaskMemFree(pOut->pszVal);
459 }
460 }
461 IMultiLanguage_Release(ml);
462 }
463 return hr;
464}
465
466static HRESULT WINAPI MimeInternat_MLANG_ConvertInetReset(IMimeInternational *iface)
467{
468 FIXME("stub\n");
469 return E_NOTIMPL;
470}
471
472static HRESULT WINAPI MimeInternat_MLANG_ConvertInetString(IMimeInternational *iface, CODEPAGEID cpiSource,
473 CODEPAGEID cpiDest,
474 LPCSTR pSource,
475 int *pnSizeOfSource,
476 LPSTR pDestination,
477 int *pnDstSize)
478{
479 FIXME("stub\n");
480 return E_NOTIMPL;
481}
482
483static HRESULT WINAPI MimeInternat_Rfc1522Decode(IMimeInternational *iface, LPCSTR pszValue,
484 LPSTR pszCharset,
485 ULONG cchmax,
486 LPSTR *ppszDecoded)
487{
488 FIXME("stub\n");
489 return E_NOTIMPL;
490}
491
492static HRESULT WINAPI MimeInternat_Rfc1522Encode(IMimeInternational *iface, LPCSTR pszValue,
493 HCHARSET hCharset,
494 LPSTR *ppszEncoded)
495{
496 FIXME("stub\n");
497 return E_NOTIMPL;
498}
499
500static IMimeInternationalVtbl mime_internat_vtbl =
501{
520};
521
523
524HRESULT MimeInternational_Construct(IMimeInternational **internat)
525{
530 global_internat->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": global_internat.cs");
531
535
537
538 IMimeInternational_AddRef(*internat);
539 return S_OK;
540}
541
542HRESULT WINAPI MimeOleGetInternat(IMimeInternational **internat)
543{
544 TRACE("(%p)\n", internat);
545
547 IMimeInternational_AddRef(*internat);
548 return S_OK;
549}
550
552{
553 IMimeInternational *internat;
554 HRESULT hr;
555
556 TRACE("(%s, %p)\n", debugstr_a(name), charset);
557
558 hr = MimeOleGetInternat(&internat);
559 if(SUCCEEDED(hr))
560 {
561 hr = IMimeInternational_FindCharset(internat, name, charset);
562 IMimeInternational_Release(internat);
563 }
564 return hr;
565}
566
567HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET hCharset, LPINETCSETINFO pCsetInfo)
568{
569 IMimeInternational *internat;
570 HRESULT hr;
571
572 TRACE("(%p, %p)\n", hCharset, pCsetInfo);
573
574 hr = MimeOleGetInternat(&internat);
575 if(SUCCEEDED(hr))
576 {
577 hr = IMimeInternational_GetCharsetInfo(internat, hCharset, pCsetInfo);
578 IMimeInternational_Release(internat);
579 }
580 return hr;
581}
582
584{
585 IMimeInternational *internat;
586 HRESULT hr;
587
588 TRACE("(%p)\n", charset);
589
590 hr = MimeOleGetInternat(&internat);
591 if(SUCCEEDED(hr))
592 {
593 hr = IMimeInternational_GetDefaultCharset(internat, charset);
594 IMimeInternational_Release(internat);
595 }
596 return hr;
597}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define UlongToHandle(ul)
Definition: basetsd.h:91
const GUID IID_IUnknown
CFF_Charset charset
Definition: cffcmap.c:137
Definition: list.h:37
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
OLECHAR * BSTR
Definition: compat.h:2293
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
@ VT_LPSTR
Definition: compat.h:2324
@ VT_LPWSTR
Definition: compat.h:2325
#define lstrlenW
Definition: compat.h:750
static HRESULT WINAPI MimeInternat_MLANG_ConvertInetReset(IMimeInternational *iface)
Definition: mimeintl.c:466
static HRESULT WINAPI MimeInternat_Rfc1522Decode(IMimeInternational *iface, LPCSTR pszValue, LPSTR pszCharset, ULONG cchmax, LPSTR *ppszDecoded)
Definition: mimeintl.c:483
static HRESULT WINAPI MimeInternat_ConvertBuffer(IMimeInternational *iface, CODEPAGEID cpiSource, CODEPAGEID cpiDest, LPBLOB pIn, LPBLOB pOut, ULONG *pcbRead)
Definition: mimeintl.c:349
static HRESULT WINAPI MimeInternat_DecodeHeader(IMimeInternational *iface, HCHARSET hCharset, LPCSTR pszData, LPPROPVARIANT pDecoded, LPRFC1522INFO pRfc1522Info)
Definition: mimeintl.c:331
static HRESULT mlang_getcsetinfo(const char *charset, MIMECSETINFO *mlang_info)
Definition: mimeintl.c:202
HRESULT WINAPI MimeOleFindCharset(LPCSTR name, LPHCHARSET charset)
Definition: mimeintl.c:551
static HRESULT WINAPI MimeInternat_CanConvertCodePages(IMimeInternational *iface, CODEPAGEID cpiSource, CODEPAGEID cpiDest)
Definition: mimeintl.c:311
static HCHARSET add_charset(struct list *list, MIMECSETINFO *mlang_info, HCHARSET handle)
Definition: mimeintl.c:223
HRESULT WINAPI MimeOleGetInternat(IMimeInternational **internat)
Definition: mimeintl.c:542
static IMimeInternationalVtbl mime_internat_vtbl
Definition: mimeintl.c:500
static HRESULT WINAPI MimeInternat_QueryInterface(IMimeInternational *iface, REFIID riid, LPVOID *ppobj)
Definition: mimeintl.c:70
static HRESULT WINAPI MimeInternat_MLANG_ConvertInetString(IMimeInternational *iface, CODEPAGEID cpiSource, CODEPAGEID cpiDest, LPCSTR pSource, int *pnSizeOfSource, LPSTR pDestination, int *pnDstSize)
Definition: mimeintl.c:472
static HRESULT WINAPI MimeInternat_ConvertString(IMimeInternational *iface, CODEPAGEID cpiSource, CODEPAGEID cpiDest, LPPROPVARIANT pIn, LPPROPVARIANT pOut)
Definition: mimeintl.c:398
HRESULT MimeInternational_Construct(IMimeInternational **internat)
Definition: mimeintl.c:524
static ULONG WINAPI MimeInternat_AddRef(IMimeInternational *iface)
Definition: mimeintl.c:84
static HRESULT WINAPI MimeInternat_GetCodePageInfo(IMimeInternational *iface, CODEPAGEID cpiCodePage, LPCODEPAGEINFO pCodePageInfo)
Definition: mimeintl.c:304
static HRESULT WINAPI MimeInternat_GetDefaultCharset(IMimeInternational *iface, LPHCHARSET phCharset)
Definition: mimeintl.c:127
static HRESULT WINAPI MimeInternat_GetCharsetInfo(IMimeInternational *iface, HCHARSET hCharset, LPINETCSETINFO pCsetInfo)
Definition: mimeintl.c:278
static HRESULT WINAPI MimeInternat_GetCodePageCharset(IMimeInternational *iface, CODEPAGEID cpiCodePage, CHARSETTYPE ctCsetType, LPHCHARSET phCharset)
Definition: mimeintl.c:161
static HRESULT get_mlang(IMultiLanguage **ml)
Definition: mimeintl.c:64
static HRESULT WINAPI MimeInternat_FindCharset(IMimeInternational *iface, LPCSTR pszCharset, LPHCHARSET phCharset)
Definition: mimeintl.c:238
static HRESULT WINAPI MimeInternat_SetDefaultCharset(IMimeInternational *iface, HCHARSET hCharset)
Definition: mimeintl.c:113
static HRESULT mlang_getcodepageinfo(UINT cp, MIMECPINFO *mlang_cp_info)
Definition: mimeintl.c:146
static internat_impl * global_internat
Definition: mimeintl.c:522
static HRESULT WINAPI MimeInternat_Rfc1522Encode(IMimeInternational *iface, LPCSTR pszValue, HCHARSET hCharset, LPSTR *ppszEncoded)
Definition: mimeintl.c:492
static internat_impl * impl_from_IMimeInternational(IMimeInternational *iface)
Definition: mimeintl.c:59
HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET charset)
Definition: mimeintl.c:583
static ULONG WINAPI MimeInternat_Release(IMimeInternational *iface)
Definition: mimeintl.c:90
HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET hCharset, LPINETCSETINFO pCsetInfo)
Definition: mimeintl.c:567
static HRESULT WINAPI MimeInternat_EncodeHeader(IMimeInternational *iface, HCHARSET hCharset, LPPROPVARIANT pData, LPSTR *ppszEncoded, LPRFC1522INFO pRfc1522Info)
Definition: mimeintl.c:340
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
UINT WINAPI GetACP(void)
Definition: locale.c:2023
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
#define CP_UNICODE
Definition: stg_prop.c:73
unsigned char
Definition: typeof.h:29
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum mode
Definition: glext.h:6217
GLenum GLsizei len
Definition: glext.h:6722
REFIID riid
Definition: atlbase.h:39
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_a
Definition: kernel32.h:31
POINT cp
Definition: magnifier.c:59
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID ULONG out_size
Definition: file.c:72
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG in_size
Definition: file.c:72
unsigned int UINT
Definition: ndis.h:50
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
_In_opt_ LPCSTR _In_opt_ LPCSTR pszValue
Definition: shlwapi.h:783
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define TRACE(s)
Definition: solgame.cpp:4
Definition: nspapi.h:57
ULONG cbSize
Definition: nspapi.h:58
BYTE * pBlobData
Definition: nspapi.h:59
PRTL_CRITICAL_SECTION_DEBUG DebugInfo
Definition: rtltypes.h:1450
Definition: mimeintl.c:43
INETCSETINFO cs_info
Definition: mimeintl.c:45
CRITICAL_SECTION cs
Definition: mimeintl.c:52
struct list charsets
Definition: mimeintl.c:54
IMimeInternational IMimeInternational_iface
Definition: mimeintl.c:50
HCHARSET default_charset
Definition: mimeintl.c:56
LONG next_charset_handle
Definition: mimeintl.c:55
Definition: name.c:39
#define DWORD_PTR
Definition: treelist.c:76
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
Definition: twain.h:1830
const char * LPCSTR
Definition: typedefs.h:52
char * LPSTR
Definition: typedefs.h:51
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156
unsigned char BYTE
Definition: xxhash.c:193