ReactOS 0.4.16-dev-2354-g16de117
config.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "ole2.h"
#include "msxml2.h"
#include "mscoree.h"
#include "corhdr.h"
#include "corerror.h"
#include "metahost.h"
#include "cordebug.h"
#include "wine/list.h"
#include "mscoree_private.h"
#include "wine/debug.h"
Include dependency graph for config.c:

Go to the source code of this file.

Classes

struct  ConfigFileHandler
 
struct  ConfigStream
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct ConfigFileHandler ConfigFileHandler
 

Enumerations

enum  parse_state {
  STATE_NONE , STATE_OK , STATE_MULTILINE , STATE_DONE ,
  STATE_ASSEMBLY_BINDING , STATE_ROOT , STATE_CONFIGURATION , STATE_PROBING ,
  STATE_RUNTIME , STATE_STARTUP , STATE_UNKNOWN , state_whitespace ,
  state_token , state_quote
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (mscoree)
 
static ConfigStreamimpl_from_IStream (IStream *iface)
 
static HRESULT WINAPI ConfigStream_QueryInterface (IStream *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ConfigStream_AddRef (IStream *iface)
 
static ULONG WINAPI ConfigStream_Release (IStream *iface)
 
static HRESULT WINAPI ConfigStream_Read (IStream *iface, void *buf, ULONG size, ULONG *ret_read)
 
static HRESULT WINAPI ConfigStream_Write (IStream *iface, const void *buf, ULONG size, ULONG *written)
 
static HRESULT WINAPI ConfigStream_Seek (IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *pNewPos)
 
static HRESULT WINAPI ConfigStream_SetSize (IStream *iface, ULARGE_INTEGER libNewSize)
 
static HRESULT WINAPI ConfigStream_CopyTo (IStream *iface, IStream *stream, ULARGE_INTEGER size, ULARGE_INTEGER *read, ULARGE_INTEGER *written)
 
static HRESULT WINAPI ConfigStream_Commit (IStream *iface, DWORD flags)
 
static HRESULT WINAPI ConfigStream_Revert (IStream *iface)
 
static HRESULT WINAPI ConfigStream_LockUnlockRegion (IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
 
static HRESULT WINAPI ConfigStream_Stat (IStream *iface, STATSTG *lpStat, DWORD grfStatFlag)
 
static HRESULT WINAPI ConfigStream_Clone (IStream *iface, IStream **ppstm)
 
HRESULT WINAPI CreateConfigStream (const WCHAR *filename, IStream **stream)
 
static ConfigFileHandlerimpl_from_ISAXContentHandler (ISAXContentHandler *iface)
 
static ConfigFileHandlerimpl_from_ISAXErrorHandler (ISAXErrorHandler *iface)
 
static HRESULT WINAPI ConfigFileHandler_QueryInterface (ISAXContentHandler *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI ConfigFileHandler_AddRef (ISAXContentHandler *iface)
 
static ULONG WINAPI ConfigFileHandler_Release (ISAXContentHandler *iface)
 
static HRESULT WINAPI ConfigFileHandler_putDocumentLocator (ISAXContentHandler *iface, ISAXLocator *pLocator)
 
static HRESULT WINAPI ConfigFileHandler_startDocument (ISAXContentHandler *iface)
 
static HRESULT WINAPI ConfigFileHandler_endDocument (ISAXContentHandler *iface)
 
static HRESULT WINAPI ConfigFileHandler_startPrefixMapping (ISAXContentHandler *iface, const WCHAR *pPrefix, int nPrefix, const WCHAR *pUri, int nUri)
 
static HRESULT WINAPI ConfigFileHandler_endPrefixMapping (ISAXContentHandler *iface, const WCHAR *pPrefix, int nPrefix)
 
static HRESULT parse_startup (ConfigFileHandler *This, ISAXAttributes *pAttr)
 
static HRESULT parse_probing (ConfigFileHandler *This, ISAXAttributes *pAttr)
 
static HRESULT parse_supported_runtime (ConfigFileHandler *This, ISAXAttributes *pAttr)
 
static HRESULT WINAPI ConfigFileHandler_startElement (ISAXContentHandler *iface, const WCHAR *pNamespaceUri, int nNamespaceUri, const WCHAR *pLocalName, int nLocalName, const WCHAR *pQName, int nQName, ISAXAttributes *pAttr)
 
static HRESULT WINAPI ConfigFileHandler_endElement (ISAXContentHandler *iface, const WCHAR *pNamespaceUri, int nNamespaceUri, const WCHAR *pLocalName, int nLocalName, const WCHAR *pQName, int nQName)
 
static HRESULT WINAPI ConfigFileHandler_characters (ISAXContentHandler *iface, const WCHAR *pChars, int nChars)
 
static HRESULT WINAPI ConfigFileHandler_ignorableWhitespace (ISAXContentHandler *iface, const WCHAR *pChars, int nChars)
 
static HRESULT WINAPI ConfigFileHandler_processingInstruction (ISAXContentHandler *iface, const WCHAR *pTarget, int nTarget, const WCHAR *pData, int nData)
 
static HRESULT WINAPI ConfigFileHandler_skippedEntity (ISAXContentHandler *iface, const WCHAR *pName, int nName)
 
static HRESULT WINAPI ConfigFileHandler_Error_QueryInterface (ISAXErrorHandler *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI ConfigFileHandler_Error_AddRef (ISAXErrorHandler *iface)
 
static ULONG WINAPI ConfigFileHandler_Error_Release (ISAXErrorHandler *iface)
 
static HRESULT WINAPI ConfigFileHandler_error (ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
 
static HRESULT WINAPI ConfigFileHandler_fatalError (ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
 
static HRESULT WINAPI ConfigFileHandler_ignorableWarning (ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
 
static void init_config (parsed_config_file *config)
 
static HRESULT parse_config (VARIANT input, parsed_config_file *result)
 
HRESULT parse_config_stream (IStream *stream, parsed_config_file *result)
 
HRESULT parse_config_file (LPCWSTR filename, parsed_config_file *result)
 
void free_parsed_config_file (parsed_config_file *file)
 

Variables

static const IStreamVtbl ConfigStreamVtbl
 
static const struct ISAXContentHandlerVtbl ConfigFileHandlerVtbl
 
static const struct ISAXErrorHandlerVtbl ConfigFileHandlerErrorVtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file config.c.

Typedef Documentation

◆ ConfigFileHandler

Enumeration Type Documentation

◆ parse_state

Enumerator
STATE_NONE 
STATE_OK 
STATE_MULTILINE 
STATE_DONE 
STATE_ASSEMBLY_BINDING 
STATE_ROOT 
STATE_CONFIGURATION 
STATE_PROBING 
STATE_RUNTIME 
STATE_STARTUP 
STATE_UNKNOWN 
state_whitespace 
state_token 
state_quote 

Definition at line 42 of file config.c.

43{
51};
@ STATE_CONFIGURATION
Definition: config.c:46
@ STATE_ASSEMBLY_BINDING
Definition: config.c:44
@ STATE_STARTUP
Definition: config.c:49
@ STATE_UNKNOWN
Definition: config.c:50
@ STATE_PROBING
Definition: config.c:47
@ STATE_ROOT
Definition: config.c:45
@ STATE_RUNTIME
Definition: config.c:48

Function Documentation

◆ ConfigFileHandler_AddRef()

static ULONG WINAPI ConfigFileHandler_AddRef ( ISAXContentHandler iface)
static

Definition at line 279 of file config.c.

280{
282 return InterlockedIncrement(&This->ref);
283}
#define InterlockedIncrement
Definition: armddk.h:53
static ConfigFileHandler * impl_from_ISAXContentHandler(ISAXContentHandler *iface)
Definition: config.c:249

◆ ConfigFileHandler_characters()

static HRESULT WINAPI ConfigFileHandler_characters ( ISAXContentHandler iface,
const WCHAR pChars,
int  nChars 
)
static

Definition at line 519 of file config.c.

521{
522 TRACE("%s\n", debugstr_wn(pChars,nChars));
523
524 return S_OK;
525}
#define S_OK
Definition: intsafe.h:52
#define debugstr_wn
Definition: kernel32.h:33
#define TRACE(s)
Definition: solgame.cpp:4

◆ ConfigFileHandler_endDocument()

static HRESULT WINAPI ConfigFileHandler_endDocument ( ISAXContentHandler iface)
static

Definition at line 307 of file config.c.

308{
309 return S_OK;
310}

◆ ConfigFileHandler_endElement()

static HRESULT WINAPI ConfigFileHandler_endElement ( ISAXContentHandler iface,
const WCHAR pNamespaceUri,
int  nNamespaceUri,
const WCHAR pLocalName,
int  nLocalName,
const WCHAR pQName,
int  nQName 
)
static

Definition at line 497 of file config.c.

500{
502
503 TRACE("%s %s %s\n", debugstr_wn(pNamespaceUri,nNamespaceUri),
504 debugstr_wn(pLocalName,nLocalName), debugstr_wn(pQName,nQName));
505
506 if (This->statenum > 0)
507 {
508 This->statenum--;
509 }
510 else
511 {
512 ERR("element end does not match a start\n");
513 return E_FAIL;
514 }
515
516 return S_OK;
517}
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_FAIL
Definition: ddrawi.h:102

◆ ConfigFileHandler_endPrefixMapping()

static HRESULT WINAPI ConfigFileHandler_endPrefixMapping ( ISAXContentHandler iface,
const WCHAR pPrefix,
int  nPrefix 
)
static

Definition at line 318 of file config.c.

320{
321 return S_OK;
322}

◆ ConfigFileHandler_error()

static HRESULT WINAPI ConfigFileHandler_error ( ISAXErrorHandler *  iface,
ISAXLocator *  pLocator,
const WCHAR pErrorMessage,
HRESULT  hrErrorCode 
)
static

Definition at line 583 of file config.c.

585{
586 WARN("%s,%lx\n", debugstr_w(pErrorMessage), hrErrorCode);
587 return S_OK;
588}
#define WARN(fmt,...)
Definition: precomp.h:61
#define debugstr_w
Definition: kernel32.h:32

◆ ConfigFileHandler_Error_AddRef()

static ULONG WINAPI ConfigFileHandler_Error_AddRef ( ISAXErrorHandler *  iface)
static

Definition at line 571 of file config.c.

572{
574 return ISAXContentHandler_AddRef(&This->ISAXContentHandler_iface);
575}
static ConfigFileHandler * impl_from_ISAXErrorHandler(ISAXErrorHandler *iface)
Definition: config.c:254

◆ ConfigFileHandler_Error_QueryInterface()

static HRESULT WINAPI ConfigFileHandler_Error_QueryInterface ( ISAXErrorHandler *  iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 564 of file config.c.

566{
568 return ISAXContentHandler_QueryInterface(&This->ISAXContentHandler_iface, riid, ppvObject);
569}
REFIID riid
Definition: atlbase.h:39

◆ ConfigFileHandler_Error_Release()

static ULONG WINAPI ConfigFileHandler_Error_Release ( ISAXErrorHandler *  iface)
static

Definition at line 577 of file config.c.

578{
580 return ISAXContentHandler_Release(&This->ISAXContentHandler_iface);
581}

◆ ConfigFileHandler_fatalError()

static HRESULT WINAPI ConfigFileHandler_fatalError ( ISAXErrorHandler *  iface,
ISAXLocator *  pLocator,
const WCHAR pErrorMessage,
HRESULT  hrErrorCode 
)
static

Definition at line 590 of file config.c.

592{
593 WARN("%s,%lx\n", debugstr_w(pErrorMessage), hrErrorCode);
594 return S_OK;
595}

◆ ConfigFileHandler_ignorableWarning()

static HRESULT WINAPI ConfigFileHandler_ignorableWarning ( ISAXErrorHandler *  iface,
ISAXLocator *  pLocator,
const WCHAR pErrorMessage,
HRESULT  hrErrorCode 
)
static

Definition at line 597 of file config.c.

599{
600 WARN("%s,%lx\n", debugstr_w(pErrorMessage), hrErrorCode);
601 return S_OK;
602}

◆ ConfigFileHandler_ignorableWhitespace()

static HRESULT WINAPI ConfigFileHandler_ignorableWhitespace ( ISAXContentHandler iface,
const WCHAR pChars,
int  nChars 
)
static

Definition at line 527 of file config.c.

529{
530 return S_OK;
531}

◆ ConfigFileHandler_processingInstruction()

static HRESULT WINAPI ConfigFileHandler_processingInstruction ( ISAXContentHandler iface,
const WCHAR pTarget,
int  nTarget,
const WCHAR pData,
int  nData 
)
static

Definition at line 533 of file config.c.

535{
536 return S_OK;
537}

◆ ConfigFileHandler_putDocumentLocator()

static HRESULT WINAPI ConfigFileHandler_putDocumentLocator ( ISAXContentHandler iface,
ISAXLocator *  pLocator 
)
static

Definition at line 296 of file config.c.

298{
299 return S_OK;
300}

◆ ConfigFileHandler_QueryInterface()

static HRESULT WINAPI ConfigFileHandler_QueryInterface ( ISAXContentHandler iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 259 of file config.c.

261{
263
264 if (IsEqualGUID(riid, &IID_ISAXContentHandler) || IsEqualGUID(riid, &IID_IUnknown))
265 *ppvObject = &This->ISAXContentHandler_iface;
266 else if (IsEqualGUID(riid, &IID_ISAXErrorHandler))
267 *ppvObject = &This->ISAXErrorHandler_iface;
268 else
269 {
270 WARN("Unsupported interface %s\n", debugstr_guid(riid));
271 return E_NOINTERFACE;
272 }
273
274 IUnknown_AddRef((IUnknown*)*ppvObject);
275
276 return S_OK;
277}
const GUID IID_IUnknown
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ ConfigFileHandler_Release()

static ULONG WINAPI ConfigFileHandler_Release ( ISAXContentHandler iface)
static

Definition at line 285 of file config.c.

286{
289
290 if (ref == 0)
291 free(This);
292
293 return ref;
294}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ ConfigFileHandler_skippedEntity()

static HRESULT WINAPI ConfigFileHandler_skippedEntity ( ISAXContentHandler iface,
const WCHAR pName,
int  nName 
)
static

Definition at line 539 of file config.c.

541{
542 TRACE("%s\n", debugstr_wn(pName,nName));
543 return S_OK;
544}
static LPSTR pName
Definition: security.c:116

◆ ConfigFileHandler_startDocument()

static HRESULT WINAPI ConfigFileHandler_startDocument ( ISAXContentHandler iface)
static

Definition at line 302 of file config.c.

303{
304 return S_OK;
305}

◆ ConfigFileHandler_startElement()

static HRESULT WINAPI ConfigFileHandler_startElement ( ISAXContentHandler iface,
const WCHAR pNamespaceUri,
int  nNamespaceUri,
const WCHAR pLocalName,
int  nLocalName,
const WCHAR pQName,
int  nQName,
ISAXAttributes pAttr 
)
static

Definition at line 407 of file config.c.

410{
412 static const WCHAR configuration[] = {'c','o','n','f','i','g','u','r','a','t','i','o','n',0};
413 static const WCHAR assemblyBinding[] = {'a','s','s','e','m','b','l','y','B','i','n','d','i','n','g',0};
414 static const WCHAR probing[] = {'p','r','o','b','i','n','g',0};
415 static const WCHAR runtime[] = {'r','u','n','t','i','m','e',0};
416 static const WCHAR startup[] = {'s','t','a','r','t','u','p',0};
417 static const WCHAR supportedRuntime[] = {'s','u','p','p','o','r','t','e','d','R','u','n','t','i','m','e',0};
418
419 HRESULT hr = S_OK;
420
421 TRACE("%s %s %s\n", debugstr_wn(pNamespaceUri,nNamespaceUri),
422 debugstr_wn(pLocalName,nLocalName), debugstr_wn(pQName,nQName));
423
424 if (This->statenum == ARRAY_SIZE(This->states) - 1)
425 {
426 ERR("file has too much nesting\n");
427 return E_FAIL;
428 }
429
430 switch (This->states[This->statenum])
431 {
432 case STATE_ROOT:
433 if (nLocalName == ARRAY_SIZE(configuration) - 1 && wcscmp(pLocalName, configuration) == 0)
434 {
435 This->states[++This->statenum] = STATE_CONFIGURATION;
436 break;
437 }
438 else
439 goto unknown;
441 if (nLocalName == ARRAY_SIZE(startup) - 1 && wcscmp(pLocalName, startup) == 0)
442 {
443 hr = parse_startup(This, pAttr);
444 This->states[++This->statenum] = STATE_STARTUP;
445 break;
446 }
447 else if (nLocalName == ARRAY_SIZE(runtime) - 1 && wcscmp(pLocalName, runtime) == 0)
448 {
449 This->states[++This->statenum] = STATE_RUNTIME;
450 break;
451 }
452 else
453 goto unknown;
454 case STATE_RUNTIME:
455 if (nLocalName == ARRAY_SIZE(assemblyBinding) - 1 &&
456 wcscmp(pLocalName, assemblyBinding) == 0)
457 {
458 This->states[++This->statenum] = STATE_ASSEMBLY_BINDING;
459 break;
460 }
461 else
462 goto unknown;
464 if (nLocalName == ARRAY_SIZE(probing) - 1 && wcscmp(pLocalName, probing) == 0)
465 {
466 hr = parse_probing(This, pAttr);
467 This->states[++This->statenum] = STATE_PROBING;
468 break;
469 }
470 else
471 goto unknown;
472 case STATE_STARTUP:
473 if (nLocalName == ARRAY_SIZE(supportedRuntime) - 1 &&
474 wcscmp(pLocalName, supportedRuntime) == 0)
475 {
477 This->states[++This->statenum] = STATE_UNKNOWN;
478 break;
479 }
480 else
481 goto unknown;
482 default:
483 goto unknown;
484 }
485
486 return hr;
487
488unknown:
489 TRACE("Unknown element %s in state %u\n", debugstr_wn(pLocalName,nLocalName),
490 This->states[This->statenum]);
491
492 This->states[++This->statenum] = STATE_UNKNOWN;
493
494 return S_OK;
495}
static void startup(void)
#define ARRAY_SIZE(A)
Definition: main.h:20
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1605
static HRESULT parse_startup(ConfigFileHandler *This, ISAXAttributes *pAttr)
Definition: config.c:324
static HRESULT parse_supported_runtime(ConfigFileHandler *This, ISAXAttributes *pAttr)
Definition: config.c:362
static HRESULT parse_probing(ConfigFileHandler *This, ISAXAttributes *pAttr)
Definition: config.c:340
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1972
HRESULT hr
Definition: shlfolder.c:183
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ ConfigFileHandler_startPrefixMapping()

static HRESULT WINAPI ConfigFileHandler_startPrefixMapping ( ISAXContentHandler iface,
const WCHAR pPrefix,
int  nPrefix,
const WCHAR pUri,
int  nUri 
)
static

Definition at line 312 of file config.c.

314{
315 return S_OK;
316}

◆ ConfigStream_AddRef()

static ULONG WINAPI ConfigStream_AddRef ( IStream iface)
static

Definition at line 94 of file config.c.

95{
98
99 TRACE("(%p) ref=%lu\n", This, ref);
100
101 return ref;
102}
static ConfigStream * impl_from_IStream(IStream *iface)
Definition: config.c:70

◆ ConfigStream_Clone()

static HRESULT WINAPI ConfigStream_Clone ( IStream iface,
IStream **  ppstm 
)
static

Definition at line 196 of file config.c.

197{
199 TRACE("(%p)\n",This);
200 return E_NOTIMPL;
201}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ ConfigStream_Commit()

static HRESULT WINAPI ConfigStream_Commit ( IStream iface,
DWORD  flags 
)
static

Definition at line 167 of file config.c.

168{
170 FIXME("(%p,%ld)\n", This, flags);
171 return E_NOTIMPL;
172}
#define FIXME(fmt,...)
Definition: precomp.h:53
GLbitfield flags
Definition: glext.h:7161

◆ ConfigStream_CopyTo()

static HRESULT WINAPI ConfigStream_CopyTo ( IStream iface,
IStream stream,
ULARGE_INTEGER  size,
ULARGE_INTEGER read,
ULARGE_INTEGER written 
)
static

Definition at line 159 of file config.c.

161{
163 FIXME("(%p)->(%p %ld %p %p)\n", This, stream, size.u.LowPart, read, written);
164 return E_NOTIMPL;
165}
#define read
Definition: acwin.h:96
GLsizeiptr size
Definition: glext.h:5919
Definition: parse.h:23

◆ ConfigStream_LockUnlockRegion()

static HRESULT WINAPI ConfigStream_LockUnlockRegion ( IStream iface,
ULARGE_INTEGER  libOffset,
ULARGE_INTEGER  cb,
DWORD  dwLockType 
)
static

Definition at line 181 of file config.c.

183{
185 TRACE("(%p,%ld,%ld,%ld)\n", This, libOffset.u.LowPart, cb.u.LowPart, dwLockType);
186 return E_NOTIMPL;
187}
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
struct _ULARGE_INTEGER::@4458 u

◆ ConfigStream_QueryInterface()

static HRESULT WINAPI ConfigStream_QueryInterface ( IStream iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 75 of file config.c.

76{
78
79 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
80
81 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IStream))
82 *ppv = &This->IStream_iface;
83 else
84 {
85 WARN("Not supported iface %s\n", debugstr_guid(riid));
86 *ppv = NULL;
87 return E_NOINTERFACE;
88 }
89
90 IUnknown_AddRef((IUnknown*)*ppv);
91 return S_OK;
92}
#define NULL
Definition: types.h:112
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ ConfigStream_Read()

static HRESULT WINAPI ConfigStream_Read ( IStream iface,
void buf,
ULONG  size,
ULONG ret_read 
)
static

Definition at line 120 of file config.c.

121{
123 DWORD read = 0;
124
125 TRACE("(%p)->(%p %lu %p)\n", This, buf, size, ret_read);
126
127 if (!ReadFile(This->file, buf, size, &read, NULL))
128 {
129 WARN("error %ld reading file\n", GetLastError());
131 }
132
133 if (ret_read) *ret_read = read;
134 return S_OK;
135}
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210

◆ ConfigStream_Release()

static ULONG WINAPI ConfigStream_Release ( IStream iface)
static

Definition at line 104 of file config.c.

105{
108
109 TRACE("(%p) ref=%lu\n",This, ref);
110
111 if (!ref)
112 {
113 CloseHandle(This->file);
114 free(This);
115 }
116
117 return ref;
118}
#define CloseHandle
Definition: compat.h:739

◆ ConfigStream_Revert()

static HRESULT WINAPI ConfigStream_Revert ( IStream iface)
static

Definition at line 174 of file config.c.

175{
177 TRACE("(%p)\n", This);
178 return E_NOTIMPL;
179}

◆ ConfigStream_Seek()

static HRESULT WINAPI ConfigStream_Seek ( IStream iface,
LARGE_INTEGER  dlibMove,
DWORD  dwOrigin,
ULARGE_INTEGER pNewPos 
)
static

Definition at line 144 of file config.c.

146{
148 TRACE("(%p)->(%ld %ld %p)\n", This, dlibMove.u.LowPart, dwOrigin, pNewPos);
149 return E_NOTIMPL;
150}
struct _LARGE_INTEGER::@2464 u

◆ ConfigStream_SetSize()

static HRESULT WINAPI ConfigStream_SetSize ( IStream iface,
ULARGE_INTEGER  libNewSize 
)
static

Definition at line 152 of file config.c.

153{
155 TRACE("(%p)->(%ld)\n", This, libNewSize.u.LowPart);
156 return E_NOTIMPL;
157}

◆ ConfigStream_Stat()

static HRESULT WINAPI ConfigStream_Stat ( IStream iface,
STATSTG *  lpStat,
DWORD  grfStatFlag 
)
static

Definition at line 189 of file config.c.

190{
192 FIXME("(%p,%p,%ld)\n", This, lpStat, grfStatFlag);
193 return E_NOTIMPL;
194}

◆ ConfigStream_Write()

static HRESULT WINAPI ConfigStream_Write ( IStream iface,
const void buf,
ULONG  size,
ULONG written 
)
static

Definition at line 137 of file config.c.

138{
140 TRACE("(%p)->(%p %lu %p)\n", This, buf, size, written);
141 return E_FAIL;
142}

◆ CreateConfigStream()

HRESULT WINAPI CreateConfigStream ( const WCHAR filename,
IStream **  stream 
)

Definition at line 220 of file config.c.

221{
222 ConfigStream *config_stream;
223 HANDLE file;
224
225 TRACE("(%s, %p)\n", debugstr_w(filename), stream);
226
227 if (!stream)
228 return COR_E_NULLREFERENCE;
229
233
234 config_stream = malloc(sizeof(*config_stream));
235 if (!config_stream)
236 {
238 return E_OUTOFMEMORY;
239 }
240
241 config_stream->IStream_iface.lpVtbl = &ConfigStreamVtbl;
242 config_stream->ref = 1;
243 config_stream->file = file;
244
245 *stream = &config_stream->IStream_iface;
246 return S_OK;
247}
#define COR_E_FILENOTFOUND
Definition: corerror.h:43
#define COR_E_NULLREFERENCE
Definition: corerror.h:36
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4
#define OPEN_EXISTING
Definition: compat.h:775
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define CreateFileW
Definition: compat.h:741
#define FILE_SHARE_READ
Definition: compat.h:136
static const IStreamVtbl ConfigStreamVtbl
Definition: config.c:203
const char * filename
Definition: ioapi.h:137
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
HANDLE file
Definition: config.c:67
LONG ref
Definition: config.c:66
IStream IStream_iface
Definition: config.c:65
Definition: fci.c:127

Referenced by parse_config_file().

◆ free_parsed_config_file()

void free_parsed_config_file ( parsed_config_file file)

Definition at line 696 of file config.c.

697{
698 supported_runtime *cursor, *cursor2;
699
700 LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, &file->supported_runtimes, supported_runtime, entry)
701 {
702 free(cursor->version);
703 list_remove(&cursor->entry);
704 free(cursor);
705 }
706
707 free(file->private_path);
708}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
const char cursor[]
Definition: icontest.c:13
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204

Referenced by _CorExeMain(), and get_runtime_info().

◆ impl_from_ISAXContentHandler()

static ConfigFileHandler * impl_from_ISAXContentHandler ( ISAXContentHandler iface)
inlinestatic

Definition at line 249 of file config.c.

250{
251 return CONTAINING_RECORD(iface, ConfigFileHandler, ISAXContentHandler_iface);
252}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by ConfigFileHandler_AddRef(), ConfigFileHandler_endElement(), ConfigFileHandler_QueryInterface(), ConfigFileHandler_Release(), and ConfigFileHandler_startElement().

◆ impl_from_ISAXErrorHandler()

static ConfigFileHandler * impl_from_ISAXErrorHandler ( ISAXErrorHandler *  iface)
inlinestatic

Definition at line 254 of file config.c.

255{
256 return CONTAINING_RECORD(iface, ConfigFileHandler, ISAXErrorHandler_iface);
257}

Referenced by ConfigFileHandler_Error_AddRef(), ConfigFileHandler_Error_QueryInterface(), and ConfigFileHandler_Error_Release().

◆ impl_from_IStream()

◆ init_config()

static void init_config ( parsed_config_file config)
static

Definition at line 614 of file config.c.

615{
616 list_init(&config->supported_runtimes);
617 config->private_path = NULL;
618}
static void list_init(struct list_entry *head)
Definition: list.h:51

Referenced by parse_config_file(), and parse_config_stream().

◆ parse_config()

static HRESULT parse_config ( VARIANT  input,
parsed_config_file result 
)
static

Definition at line 620 of file config.c.

621{
622 ISAXXMLReader *reader;
624 HRESULT hr;
625
627 if (!handler)
628 return E_OUTOFMEMORY;
629
630 handler->ISAXContentHandler_iface.lpVtbl = &ConfigFileHandlerVtbl;
631 handler->ISAXErrorHandler_iface.lpVtbl = &ConfigFileHandlerErrorVtbl;
632 handler->ref = 1;
633 handler->states[0] = STATE_ROOT;
634 handler->statenum = 0;
635 handler->result = result;
636
637 hr = CoCreateInstance(&CLSID_SAXXMLReader, NULL, CLSCTX_INPROC_SERVER,
638 &IID_ISAXXMLReader, (LPVOID*)&reader);
639
640 if (SUCCEEDED(hr))
641 {
642 hr = ISAXXMLReader_putContentHandler(reader, &handler->ISAXContentHandler_iface);
643
644 if (SUCCEEDED(hr))
645 hr = ISAXXMLReader_putErrorHandler(reader, &handler->ISAXErrorHandler_iface);
646
647 if (SUCCEEDED(hr))
648 hr = ISAXXMLReader_parse(reader, input);
649
650 ISAXXMLReader_Release(reader);
651 }
652
653 ISAXContentHandler_Release(&handler->ISAXContentHandler_iface);
654
655 return S_OK;
656}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
static const struct ISAXErrorHandlerVtbl ConfigFileHandlerErrorVtbl
Definition: config.c:604
static const struct ISAXContentHandlerVtbl ConfigFileHandlerVtbl
Definition: config.c:546
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
GLuint64EXT * result
Definition: glext.h:11304
GLenum GLenum GLenum input
Definition: glext.h:9031
#define SUCCEEDED(hr)
Definition: intsafe.h:50
Definition: reader.h:84

Referenced by parse_config_stream().

◆ parse_config_file()

HRESULT parse_config_file ( LPCWSTR  filename,
parsed_config_file result 
)

Definition at line 678 of file config.c.

679{
680 HRESULT hr;
682
684
686 if (FAILED(hr))
687 return hr;
688
690
691 IStream_Release(stream);
692
693 return hr;
694}
HRESULT parse_config_stream(IStream *stream, parsed_config_file *result)
Definition: config.c:658
HRESULT WINAPI CreateConfigStream(const WCHAR *filename, IStream **stream)
Definition: config.c:220
static void init_config(parsed_config_file *config)
Definition: config.c:614
#define FAILED(hr)
Definition: intsafe.h:51

Referenced by _CorExeMain(), and get_runtime_info().

◆ parse_config_stream()

HRESULT parse_config_stream ( IStream stream,
parsed_config_file result 
)

Definition at line 658 of file config.c.

659{
660 VARIANT var;
661 HRESULT hr;
662 HRESULT initresult;
663
665
667 V_VT(&var) = VT_UNKNOWN;
669
671
672 if (SUCCEEDED(initresult))
674
675 return hr;
676}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
@ VT_UNKNOWN
Definition: compat.h:2308
static HRESULT parse_config(VARIANT input, parsed_config_file *result)
Definition: config.c:620
const char * var
Definition: shader.c:5666
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_VT(A)
Definition: oleauto.h:211

Referenced by get_runtime_info(), and parse_config_file().

◆ parse_probing()

static HRESULT parse_probing ( ConfigFileHandler This,
ISAXAttributes pAttr 
)
static

Definition at line 340 of file config.c.

341{
342 static const WCHAR privatePath[] = {'p','r','i','v','a','t','e','P','a','t','h',0};
343 static const WCHAR empty[] = {0};
345 int value_size;
346 HRESULT hr;
347
348 hr = ISAXAttributes_getValueFromName(pAttr, empty, 0, privatePath, lstrlenW(privatePath), &value, &value_size);
349 if (SUCCEEDED(hr))
350 {
351 TRACE("%s\n", debugstr_wn(value, value_size));
352
353 This->result->private_path = wcsdup(value);
354 if (!This->result->private_path)
356 }
357
358 return hr;
359}
static const WCHAR empty[1]
Definition: string.c:47
#define lstrlenW
Definition: compat.h:750
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
Definition: pdh_main.c:96
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by ConfigFileHandler_startElement().

◆ parse_startup()

static HRESULT parse_startup ( ConfigFileHandler This,
ISAXAttributes pAttr 
)
static

Definition at line 324 of file config.c.

325{
326 static const WCHAR legacy[] = {'u','s','e','L','e','g','a','c','y','V','2','R','u','n','t','i','m','e','A','c','t','i','v','a','t','i','o','n','P','o','l','i','c','y',0};
327 static const WCHAR empty[] = {0};
329 int value_size;
330 HRESULT hr;
331
332 hr = ISAXAttributes_getValueFromName(pAttr, empty, 0, legacy, lstrlenW(legacy), &value, &value_size);
333 if (SUCCEEDED(hr))
334 FIXME("useLegacyV2RuntimeActivationPolicy=%s not implemented\n", debugstr_wn(value, value_size));
335 hr = S_OK;
336
337 return hr;
338}
BOOL legacy
Definition: mkisofs.c:131

Referenced by ConfigFileHandler_startElement().

◆ parse_supported_runtime()

static HRESULT parse_supported_runtime ( ConfigFileHandler This,
ISAXAttributes pAttr 
)
static

Definition at line 362 of file config.c.

363{
364 static const WCHAR version[] = {'v','e','r','s','i','o','n',0};
365 static const WCHAR sku[] = {'s','k','u',0};
366 static const WCHAR empty[] = {0};
368 int value_size;
369 HRESULT hr;
371
372 hr = ISAXAttributes_getValueFromName(pAttr, empty, 0, version, lstrlenW(version), &value, &value_size);
373 if (SUCCEEDED(hr))
374 {
375 TRACE("%s\n", debugstr_wn(value, value_size));
376 entry = malloc(sizeof(supported_runtime));
377 if (entry)
378 {
379 entry->version = wcsdup(value);
380 if (entry->version)
381 {
382 list_add_tail(&This->result->supported_runtimes, &entry->entry);
383 }
384 else
385 {
386 free(entry);
388 }
389 }
390 else
392 }
393 else
394 WARN("Missing version attribute\n");
395
396 if (SUCCEEDED(hr))
397 {
398 hr = ISAXAttributes_getValueFromName(pAttr, empty, 0, sku, lstrlenW(sku), &value, &value_size);
399 if (SUCCEEDED(hr))
400 FIXME("sku=%s not implemented\n", debugstr_wn(value, value_size));
401 hr = S_OK;
402 }
403
404 return hr;
405}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static const WCHAR version[]
Definition: asmname.c:66

Referenced by ConfigFileHandler_startElement().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( mscoree  )

Variable Documentation

◆ ConfigFileHandlerErrorVtbl

const struct ISAXErrorHandlerVtbl ConfigFileHandlerErrorVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ConfigFileHandler_ignorableWarning(ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
Definition: config.c:597
static ULONG WINAPI ConfigFileHandler_Error_Release(ISAXErrorHandler *iface)
Definition: config.c:577
static ULONG WINAPI ConfigFileHandler_Error_AddRef(ISAXErrorHandler *iface)
Definition: config.c:571
static HRESULT WINAPI ConfigFileHandler_Error_QueryInterface(ISAXErrorHandler *iface, REFIID riid, void **ppvObject)
Definition: config.c:564
static HRESULT WINAPI ConfigFileHandler_fatalError(ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
Definition: config.c:590
static HRESULT WINAPI ConfigFileHandler_error(ISAXErrorHandler *iface, ISAXLocator *pLocator, const WCHAR *pErrorMessage, HRESULT hrErrorCode)
Definition: config.c:583

Definition at line 604 of file config.c.

Referenced by parse_config().

◆ ConfigFileHandlerVtbl

const struct ISAXContentHandlerVtbl ConfigFileHandlerVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI ConfigFileHandler_skippedEntity(ISAXContentHandler *iface, const WCHAR *pName, int nName)
Definition: config.c:539
static HRESULT WINAPI ConfigFileHandler_processingInstruction(ISAXContentHandler *iface, const WCHAR *pTarget, int nTarget, const WCHAR *pData, int nData)
Definition: config.c:533
static HRESULT WINAPI ConfigFileHandler_endDocument(ISAXContentHandler *iface)
Definition: config.c:307
static HRESULT WINAPI ConfigFileHandler_endPrefixMapping(ISAXContentHandler *iface, const WCHAR *pPrefix, int nPrefix)
Definition: config.c:318
static HRESULT WINAPI ConfigFileHandler_QueryInterface(ISAXContentHandler *iface, REFIID riid, void **ppvObject)
Definition: config.c:259
static HRESULT WINAPI ConfigFileHandler_ignorableWhitespace(ISAXContentHandler *iface, const WCHAR *pChars, int nChars)
Definition: config.c:527
static ULONG WINAPI ConfigFileHandler_AddRef(ISAXContentHandler *iface)
Definition: config.c:279
static HRESULT WINAPI ConfigFileHandler_startDocument(ISAXContentHandler *iface)
Definition: config.c:302
static HRESULT WINAPI ConfigFileHandler_putDocumentLocator(ISAXContentHandler *iface, ISAXLocator *pLocator)
Definition: config.c:296
static HRESULT WINAPI ConfigFileHandler_startElement(ISAXContentHandler *iface, const WCHAR *pNamespaceUri, int nNamespaceUri, const WCHAR *pLocalName, int nLocalName, const WCHAR *pQName, int nQName, ISAXAttributes *pAttr)
Definition: config.c:407
static HRESULT WINAPI ConfigFileHandler_endElement(ISAXContentHandler *iface, const WCHAR *pNamespaceUri, int nNamespaceUri, const WCHAR *pLocalName, int nLocalName, const WCHAR *pQName, int nQName)
Definition: config.c:497
static ULONG WINAPI ConfigFileHandler_Release(ISAXContentHandler *iface)
Definition: config.c:285
static HRESULT WINAPI ConfigFileHandler_startPrefixMapping(ISAXContentHandler *iface, const WCHAR *pPrefix, int nPrefix, const WCHAR *pUri, int nUri)
Definition: config.c:312
static HRESULT WINAPI ConfigFileHandler_characters(ISAXContentHandler *iface, const WCHAR *pChars, int nChars)
Definition: config.c:519

Definition at line 546 of file config.c.

Referenced by parse_config().

◆ ConfigStreamVtbl

const IStreamVtbl ConfigStreamVtbl
static
Initial value:
= {
}
static ULONG WINAPI ConfigStream_Release(IStream *iface)
Definition: config.c:104
static ULONG WINAPI ConfigStream_AddRef(IStream *iface)
Definition: config.c:94
static HRESULT WINAPI ConfigStream_Read(IStream *iface, void *buf, ULONG size, ULONG *ret_read)
Definition: config.c:120
static HRESULT WINAPI ConfigStream_Seek(IStream *iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *pNewPos)
Definition: config.c:144
static HRESULT WINAPI ConfigStream_Stat(IStream *iface, STATSTG *lpStat, DWORD grfStatFlag)
Definition: config.c:189
static HRESULT WINAPI ConfigStream_Write(IStream *iface, const void *buf, ULONG size, ULONG *written)
Definition: config.c:137
static HRESULT WINAPI ConfigStream_CopyTo(IStream *iface, IStream *stream, ULARGE_INTEGER size, ULARGE_INTEGER *read, ULARGE_INTEGER *written)
Definition: config.c:159
static HRESULT WINAPI ConfigStream_Commit(IStream *iface, DWORD flags)
Definition: config.c:167
static HRESULT WINAPI ConfigStream_Revert(IStream *iface)
Definition: config.c:174
static HRESULT WINAPI ConfigStream_Clone(IStream *iface, IStream **ppstm)
Definition: config.c:196
static HRESULT WINAPI ConfigStream_LockUnlockRegion(IStream *iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
Definition: config.c:181
static HRESULT WINAPI ConfigStream_SetSize(IStream *iface, ULARGE_INTEGER libNewSize)
Definition: config.c:152
static HRESULT WINAPI ConfigStream_QueryInterface(IStream *iface, REFIID riid, void **ppv)
Definition: config.c:75

Definition at line 203 of file config.c.

Referenced by CreateConfigStream().