ReactOS 0.4.17-dev-470-gf9e3448
vbscript_main.c File Reference
#include "initguid.h"
#include "vbscript.h"
#include "objsafe.h"
#include "mshtmhst.h"
#include "rpcproxy.h"
#include "vbscript_classes.h"
#include "vbsglobal.h"
#include "vbsregexp55.h"
#include "wine/debug.h"
Include dependency graph for vbscript_main.c:

Go to the source code of this file.

Macros

#define MIN_BLOCK_SIZE   128
 
#define ARENA_FREE_FILLER   0xaa
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (vbscript)
 
 WINE_DECLARE_DEBUG_CHANNEL (heap)
 
 DEFINE_GUID (GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 
BSTR get_vbscript_string (int id)
 
static DWORD block_size (DWORD block)
 
void heap_pool_init (heap_pool_t *heap)
 
voidheap_pool_alloc (heap_pool_t *heap, size_t size)
 
voidheap_pool_grow (heap_pool_t *heap, void *mem, DWORD size, DWORD inc)
 
void heap_pool_clear (heap_pool_t *heap)
 
void heap_pool_free (heap_pool_t *heap)
 
heap_pool_theap_pool_mark (heap_pool_t *heap)
 
HRESULT get_dispatch_typeinfo (ITypeInfo **out)
 
static HRESULT WINAPI ClassFactory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI ClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_LockServer (IClassFactory *iface, BOOL fLock)
 
BOOL WINAPI DllMain (HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 

Variables

static HINSTANCE vbscript_hinstance
 
static ITypeInfodispatch_typeinfo
 
static const IClassFactoryVtbl VBScriptFactoryVtbl
 
static IClassFactory VBScriptFactory = { &VBScriptFactoryVtbl }
 
static const IClassFactoryVtbl VBScriptRegExpFactoryVtbl
 
static IClassFactory VBScriptRegExpFactory = { &VBScriptRegExpFactoryVtbl }
 

Macro Definition Documentation

◆ ARENA_FREE_FILLER

#define ARENA_FREE_FILLER   0xaa

Definition at line 47 of file vbscript_main.c.

◆ MIN_BLOCK_SIZE

#define MIN_BLOCK_SIZE   128

Definition at line 46 of file vbscript_main.c.

Function Documentation

◆ block_size()

static DWORD block_size ( DWORD  block)
inlinestatic

Definition at line 49 of file vbscript_main.c.

50{
51 return MIN_BLOCK_SIZE << block;
52}
#define MIN_BLOCK_SIZE
Definition: vbscript_main.c:46
static unsigned int block
Definition: xmlmemory.c:101

Referenced by heap_pool_alloc(), heap_pool_clear(), and heap_pool_grow().

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory iface)
static

Definition at line 220 of file vbscript_main.c.

221{
222 TRACE("(%p)\n", iface);
223 return 2;
224}
#define TRACE(s)
Definition: solgame.cpp:4

◆ ClassFactory_LockServer()

static HRESULT WINAPI ClassFactory_LockServer ( IClassFactory iface,
BOOL  fLock 
)
static

Definition at line 232 of file vbscript_main.c.

233{
234 TRACE("(%p)->(%x)\n", iface, fLock);
235 return S_OK;
236}
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

static HRESULT WINAPI ClassFactory_QueryInterface ( IClassFactory iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 199 of file vbscript_main.c.

200{
201 *ppv = NULL;
202
204 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
205 *ppv = iface;
206 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
207 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
208 *ppv = iface;
209 }
210
211 if(*ppv) {
212 IUnknown_AddRef((IUnknown*)*ppv);
213 return S_OK;
214 }
215
216 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
217 return E_NOINTERFACE;
218}
#define FIXME(fmt,...)
Definition: precomp.h:53
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ ClassFactory_Release()

static ULONG WINAPI ClassFactory_Release ( IClassFactory iface)
static

Definition at line 226 of file vbscript_main.c.

227{
228 TRACE("(%p)\n", iface);
229 return 1;
230}

◆ DEFINE_GUID()

DEFINE_GUID ( GUID_NULL  ,
,
,
,
,
,
,
,
,
,
,
 
)

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
LPVOID ppv 
)

Definition at line 283 of file vbscript_main.c.

284{
285 if(IsEqualGUID(&CLSID_VBScript, rclsid)) {
286 TRACE("(CLSID_VBScript %s %p)\n", debugstr_guid(riid), ppv);
287 return IClassFactory_QueryInterface(&VBScriptFactory, riid, ppv);
288 }else if(IsEqualGUID(&CLSID_VBScriptRegExp, rclsid)) {
289 TRACE("(CLSID_VBScriptRegExp %s %p)\n", debugstr_guid(riid), ppv);
290 return IClassFactory_QueryInterface(&VBScriptRegExpFactory, riid, ppv);
291 }
292
293 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
295}
const CLSID CLSID_VBScriptRegExp
const CLSID CLSID_VBScript
static IClassFactory VBScriptFactory
static IClassFactory VBScriptRegExpFactory
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hInstDLL,
DWORD  fdwReason,
LPVOID  lpv 
)

Definition at line 261 of file vbscript_main.c.

262{
263 TRACE("(%p %ld %p)\n", hInstDLL, fdwReason, lpv);
264
265 switch(fdwReason)
266 {
269 vbscript_hinstance = hInstDLL;
270 break;
272 if (lpv) break;
273 if (dispatch_typeinfo) ITypeInfo_Release(dispatch_typeinfo);
275 }
276
277 return TRUE;
278}
static DWORD const fdwReason
#define TRUE
Definition: types.h:120
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
void release_regexp_typelib(void)
Definition: vbregexp.c:1849
static HINSTANCE vbscript_hinstance
Definition: vbscript_main.c:36
static ITypeInfo * dispatch_typeinfo
Definition: vbscript_main.c:37

◆ get_dispatch_typeinfo()

HRESULT get_dispatch_typeinfo ( ITypeInfo **  out)

Definition at line 176 of file vbscript_main.c.

177{
180 HRESULT hr;
181
183 {
185 if (FAILED(hr)) return hr;
186
187 hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
188 ITypeLib_Release(typelib);
189 if (FAILED(hr)) return hr;
190
192 ITypeInfo_Release(typeinfo);
193 }
194
196 return S_OK;
197}
HRESULT hr
Definition: delayimp.cpp:582
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
Definition: typelib.c:531
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define FAILED(hr)
Definition: intsafe.h:51
#define STDOLE_MINORVERNUM
Definition: oleauto.h:31
#define STDOLE_LCID
Definition: oleauto.h:32
#define STDOLE_MAJORVERNUM
Definition: oleauto.h:30
const GUID IID_IDispatch
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by ScriptTypeComp_Bind(), ScriptTypeComp_BindType(), ScriptTypeInfo_AddressOfMember(), ScriptTypeInfo_GetDllEntry(), ScriptTypeInfo_GetDocumentation(), ScriptTypeInfo_GetIDsOfNames(), ScriptTypeInfo_GetMops(), ScriptTypeInfo_GetNames(), ScriptTypeInfo_GetRefTypeInfo(), and ScriptTypeInfo_Invoke().

◆ get_vbscript_string()

BSTR get_vbscript_string ( int  id)

Definition at line 39 of file vbscript_main.c.

40{
41 WCHAR buf[512];
43 return SysAllocString(buf);
44}
#define ARRAY_SIZE(A)
Definition: main.h:20
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
short WCHAR
Definition: pedump.c:58
#define LoadStringW
Definition: utils.h:64

Referenced by compile_error(), and map_vbs_exception().

◆ heap_pool_alloc()

void * heap_pool_alloc ( heap_pool_t heap,
size_t  size 
)

Definition at line 60 of file vbscript_main.c.

61{
62 struct list *list;
63 void *tmp;
64
65 size = (size+3)&~3;
66
67 if(!heap->block_cnt) {
68 if(!heap->blocks) {
69 heap->blocks = malloc(sizeof(void*));
70 if(!heap->blocks)
71 return NULL;
72 }
73
74 tmp = malloc(block_size(0));
75 if(!tmp)
76 return NULL;
77
78 heap->blocks[0] = tmp;
79 heap->block_cnt = 1;
80 }
81
82 if(heap->offset + size <= block_size(heap->last_block)) {
83 tmp = ((BYTE*)heap->blocks[heap->last_block])+heap->offset;
84 heap->offset += size;
85 return tmp;
86 }
87
88 if(size <= block_size(heap->last_block+1)) {
89 if(heap->last_block+1 == heap->block_cnt) {
90 tmp = realloc(heap->blocks, (heap->block_cnt+1)*sizeof(void*));
91 if(!tmp)
92 return NULL;
93
94 heap->blocks = tmp;
95 heap->blocks[heap->block_cnt] = malloc(block_size(heap->block_cnt));
96 if(!heap->blocks[heap->block_cnt])
97 return NULL;
98
99 heap->block_cnt++;
100 }
101
102 heap->last_block++;
103 heap->offset = size;
104 return heap->blocks[heap->last_block];
105 }
106
107 list = malloc(size + sizeof(struct list));
108 if(!list)
109 return NULL;
110
111 list_add_head(&heap->custom_blocks, list);
112 return list+1;
113}
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
Definition: list.h:37
#define realloc
Definition: debug_ros.c:6
#define malloc
Definition: debug_ros.c:4
GLsizeiptr size
Definition: glext.h:5919
#define list
Definition: rosglue.h:35
Definition: heap.c:86
static DWORD block_size(DWORD block)
Definition: vbscript_main.c:49
unsigned char BYTE
Definition: xxhash.c:193

Referenced by heap_pool_grow().

◆ heap_pool_clear()

void heap_pool_clear ( heap_pool_t heap)

Definition at line 131 of file vbscript_main.c.

132{
133 struct list *tmp;
134
135 if(!heap)
136 return;
137
138 while((tmp = list_next(&heap->custom_blocks, &heap->custom_blocks))) {
139 list_remove(tmp);
140 free(tmp);
141 }
142
143 if(WARN_ON(heap)) {
144 DWORD i;
145
146 for(i=0; i < heap->block_cnt; i++)
148 }
149
150 heap->last_block = heap->offset = 0;
151 heap->mark = FALSE;
152}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
#define free
Definition: debug_ros.c:5
#define FALSE
Definition: types.h:117
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define WARN_ON(c)
Definition: module.h:257
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
Definition: list.h:115
#define memset(x, y, z)
Definition: compat.h:39
#define ARENA_FREE_FILLER
Definition: vbscript_main.c:47

Referenced by heap_pool_free(), RegExp2_Replace(), RegExp2_Test(), RegExp_exec(), regexp_execute(), regexp_match(), regexp_match_next(), regexp_new(), regexp_string_match(), and RegExp_test().

◆ heap_pool_free()

void heap_pool_free ( heap_pool_t heap)

Definition at line 154 of file vbscript_main.c.

155{
156 DWORD i;
157
159
160 for(i=0; i < heap->block_cnt; i++)
161 free(heap->blocks[i]);
162 free(heap->blocks);
163
165}
void heap_pool_init(heap_pool_t *heap)
Definition: vbscript_main.c:54
void heap_pool_clear(heap_pool_t *heap)

Referenced by compile_script(), RegExp2_Release(), release_bytecode(), release_exec(), release_vbscode(), script_release(), and ScriptDisp_Release().

◆ heap_pool_grow()

void * heap_pool_grow ( heap_pool_t heap,
void mem,
DWORD  size,
DWORD  inc 
)

Definition at line 115 of file vbscript_main.c.

116{
117 void *ret;
118
119 if(mem == (BYTE*)heap->blocks[heap->last_block] + heap->offset-size
120 && heap->offset+inc < block_size(heap->last_block)) {
121 heap->offset += inc;
122 return mem;
123 }
124
126 if(ret) /* FIXME: avoid copying for custom blocks */
127 memcpy(ret, mem, size);
128 return ret;
129}
return ret
Definition: mutex.c:146
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: mem.c:349
void * heap_pool_alloc(heap_pool_t *heap, size_t size)
Definition: vbscript_main.c:60

Referenced by PushBackTrackState(), and ReallocStateStack().

◆ heap_pool_init()

void heap_pool_init ( heap_pool_t heap)

Definition at line 54 of file vbscript_main.c.

55{
56 memset(heap, 0, sizeof(*heap));
57 list_init(&heap->custom_blocks);
58}
static void list_init(struct list_entry *head)
Definition: list.h:51

Referenced by alloc_vbscode(), compile_script(), create_regexp(), create_script_disp(), exec_script(), heap_pool_free(), init_code(), and JScript_SetScriptSite().

◆ heap_pool_mark()

heap_pool_t * heap_pool_mark ( heap_pool_t heap)

Definition at line 167 of file vbscript_main.c.

168{
169 if(heap->mark)
170 return NULL;
171
172 heap->mark = TRUE;
173 return heap;
174}

Referenced by RegExp2_Replace(), RegExp2_Test(), RegExp_exec(), regexp_execute(), regexp_match(), regexp_match_next(), regexp_new(), regexp_string_match(), and RegExp_test().

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( heap  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( vbscript  )

Variable Documentation

◆ dispatch_typeinfo

ITypeInfo* dispatch_typeinfo
static

Definition at line 37 of file vbscript_main.c.

Referenced by DllMain(), and get_dispatch_typeinfo().

◆ vbscript_hinstance

HINSTANCE vbscript_hinstance
static

Definition at line 36 of file vbscript_main.c.

Referenced by DllMain(), and get_vbscript_string().

◆ VBScriptFactory

IClassFactory VBScriptFactory = { &VBScriptFactoryVtbl }
static

Definition at line 246 of file vbscript_main.c.

Referenced by DllGetClassObject().

◆ VBScriptFactoryVtbl

const IClassFactoryVtbl VBScriptFactoryVtbl
static
Initial value:
= {
}
HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv)
Definition: vbscript.c:1201
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)

Definition at line 238 of file vbscript_main.c.

◆ VBScriptRegExpFactory

IClassFactory VBScriptRegExpFactory = { &VBScriptRegExpFactoryVtbl }
static

Definition at line 256 of file vbscript_main.c.

Referenced by DllGetClassObject().

◆ VBScriptRegExpFactoryVtbl

const IClassFactoryVtbl VBScriptRegExpFactoryVtbl
static
Initial value:
= {
}
HRESULT WINAPI VBScriptRegExpFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv)
Definition: vbregexp.c:1833

Definition at line 248 of file vbscript_main.c.