ReactOS 0.4.16-dev-329-g9223134
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)
 
BSTR get_vbscript_error_string (HRESULT error)
 
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)
 
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)
 
HRESULT WINAPI DllCanUnloadNow (void)
 
HRESULT WINAPI DllRegisterServer (void)
 
HRESULT WINAPI DllUnregisterServer (void)
 

Variables

static HINSTANCE vbscript_hinstance
 
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 54 of file vbscript_main.c.

◆ MIN_BLOCK_SIZE

#define MIN_BLOCK_SIZE   128

Definition at line 53 of file vbscript_main.c.

Function Documentation

◆ block_size()

static DWORD block_size ( DWORD  block)
inlinestatic

Definition at line 56 of file vbscript_main.c.

57{
58 return MIN_BLOCK_SIZE << block;
59}
#define MIN_BLOCK_SIZE
Definition: vbscript_main.c:53
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 204 of file vbscript_main.c.

205{
206 TRACE("(%p)\n", iface);
207 return 2;
208}
#define TRACE(s)
Definition: solgame.cpp:4

◆ ClassFactory_LockServer()

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

Definition at line 216 of file vbscript_main.c.

217{
218 TRACE("(%p)->(%x)\n", iface, fLock);
219 return S_OK;
220}
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

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

Definition at line 183 of file vbscript_main.c.

184{
185 *ppv = NULL;
186
188 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
189 *ppv = iface;
190 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
191 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
192 *ppv = iface;
193 }
194
195 if(*ppv) {
196 IUnknown_AddRef((IUnknown*)*ppv);
197 return S_OK;
198 }
199
200 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
201 return E_NOINTERFACE;
202}
#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:2364

◆ ClassFactory_Release()

static ULONG WINAPI ClassFactory_Release ( IClassFactory iface)
static

Definition at line 210 of file vbscript_main.c.

211{
212 TRACE("(%p)\n", iface);
213 return 1;
214}

◆ DEFINE_GUID()

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

◆ DllCanUnloadNow()

HRESULT WINAPI DllCanUnloadNow ( void  )

Definition at line 285 of file vbscript_main.c.

286{
287 return S_FALSE;
288}
#define S_FALSE
Definition: winerror.h:2357

◆ DllGetClassObject()

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

Definition at line 268 of file vbscript_main.c.

269{
270 if(IsEqualGUID(&CLSID_VBScript, rclsid)) {
271 TRACE("(CLSID_VBScript %s %p)\n", debugstr_guid(riid), ppv);
272 return IClassFactory_QueryInterface(&VBScriptFactory, riid, ppv);
273 }else if(IsEqualGUID(&CLSID_VBScriptRegExp, rclsid)) {
274 TRACE("(CLSID_VBScriptRegExp %s %p)\n", debugstr_guid(riid), ppv);
275 return IClassFactory_QueryInterface(&VBScriptRegExpFactory, riid, ppv);
276 }
277
278 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
280}
const CLSID CLSID_VBScript
const CLSID CLSID_VBScriptRegExp
static IClassFactory VBScriptFactory
static IClassFactory VBScriptRegExpFactory
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663

◆ DllMain()

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

Definition at line 245 of file vbscript_main.c.

246{
247 TRACE("(%p %d %p)\n", hInstDLL, fdwReason, lpv);
248
249 switch(fdwReason)
250 {
251 case DLL_WINE_PREATTACH:
252 return FALSE; /* prefer native version */
255 vbscript_hinstance = hInstDLL;
256 break;
258 if (lpv) break;
260 }
261
262 return TRUE;
263}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#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:1634
static HINSTANCE vbscript_hinstance
Definition: vbscript_main.c:36

◆ DllRegisterServer()

HRESULT WINAPI DllRegisterServer ( void  )

Definition at line 293 of file vbscript_main.c.

294{
295 TRACE("()\n");
297}
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98

◆ DllUnregisterServer()

HRESULT WINAPI DllUnregisterServer ( void  )

Definition at line 302 of file vbscript_main.c.

303{
304 TRACE("()\n");
306}
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110

◆ get_vbscript_error_string()

BSTR get_vbscript_error_string ( HRESULT  error)

Definition at line 45 of file vbscript_main.c.

46{
47 BSTR ret;
50 return ret;
51}
OLECHAR * BSTR
Definition: compat.h:2293
#define VBS_UNKNOWN_RUNTIME_ERROR
#define error(str)
Definition: mkdosfs.c:1605
#define FACILITY_VBS
Definition: vbscript.h:378
BSTR get_vbscript_string(int id)
Definition: vbscript_main.c:38
int ret
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
#define HRESULT_CODE(hr)
Definition: winerror.h:76

Referenced by compile_error(), Err_Raise(), and exec_script().

◆ get_vbscript_string()

BSTR get_vbscript_string ( int  id)

Definition at line 38 of file vbscript_main.c.

39{
40 WCHAR buf[512];
42 return SysAllocString(buf);
43}
#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
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by compile_error(), Err_Raise(), exec_script(), and get_vbscript_error_string().

◆ heap_pool_alloc()

void * heap_pool_alloc ( heap_pool_t heap,
size_t  size 
)

Definition at line 67 of file vbscript_main.c.

68{
69 struct list *list;
70 void *tmp;
71
72 size = (size+3)&~3;
73
74 if(!heap->block_cnt) {
75 if(!heap->blocks) {
76 heap->blocks = heap_alloc(sizeof(void*));
77 if(!heap->blocks)
78 return NULL;
79 }
80
81 tmp = heap_alloc(block_size(0));
82 if(!tmp)
83 return NULL;
84
85 heap->blocks[0] = tmp;
86 heap->block_cnt = 1;
87 }
88
89 if(heap->offset + size <= block_size(heap->last_block)) {
90 tmp = ((BYTE*)heap->blocks[heap->last_block])+heap->offset;
91 heap->offset += size;
92 return tmp;
93 }
94
95 if(size <= block_size(heap->last_block+1)) {
96 if(heap->last_block+1 == heap->block_cnt) {
97 tmp = heap_realloc(heap->blocks, (heap->block_cnt+1)*sizeof(void*));
98 if(!tmp)
99 return NULL;
100
101 heap->blocks = tmp;
102 heap->blocks[heap->block_cnt] = heap_alloc(block_size(heap->block_cnt));
103 if(!heap->blocks[heap->block_cnt])
104 return NULL;
105
106 heap->block_cnt++;
107 }
108
109 heap->last_block++;
110 heap->offset = size;
111 return heap->blocks[heap->last_block];
112 }
113
114 list = heap_alloc(size + sizeof(struct list));
115 if(!list)
116 return NULL;
117
118 list_add_head(&heap->custom_blocks, list);
119 return list+1;
120}
static void * heap_alloc(size_t len)
Definition: appwiz.h:66
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:71
static void list_add_head(struct list_entry *head, struct list_entry *entry)
Definition: list.h:76
Definition: list.h:37
GLsizeiptr size
Definition: glext.h:5919
#define list
Definition: rosglue.h:35
static HANDLE heap
Definition: heap.c:65
static DWORD block_size(DWORD block)
Definition: vbscript_main.c:56
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 138 of file vbscript_main.c.

139{
140 struct list *tmp;
141
142 if(!heap)
143 return;
144
145 while((tmp = list_next(&heap->custom_blocks, &heap->custom_blocks))) {
146 list_remove(tmp);
147 heap_free(tmp);
148 }
149
150 if(WARN_ON(heap)) {
151 DWORD i;
152
153 for(i=0; i < heap->block_cnt; i++)
155 }
156
157 heap->last_block = heap->offset = 0;
158 heap->mark = FALSE;
159}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
static void list_remove(struct list_entry *entry)
Definition: list.h:90
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:54

Referenced by heap_pool_free(), 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 161 of file vbscript_main.c.

162{
163 DWORD i;
164
166
167 for(i=0; i < heap->block_cnt; i++)
168 heap_free(heap->blocks[i]);
169 heap_free(heap->blocks);
170
172}
void heap_pool_init(heap_pool_t *heap)
Definition: vbscript_main.c:61
void heap_pool_clear(heap_pool_t *heap)

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

◆ heap_pool_grow()

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

Definition at line 122 of file vbscript_main.c.

123{
124 void *ret;
125
126 if(mem == (BYTE*)heap->blocks[heap->last_block] + heap->offset-size
127 && heap->offset+inc < block_size(heap->last_block)) {
128 heap->offset += inc;
129 return mem;
130 }
131
133 if(ret) /* FIXME: avoid copying for custom blocks */
134 memcpy(ret, mem, size);
135 return ret;
136}
#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:67

Referenced by PushBackTrackState(), and ReallocStateStack().

◆ heap_pool_init()

void heap_pool_init ( heap_pool_t heap)

Definition at line 61 of file vbscript_main.c.

62{
63 memset(heap, 0, sizeof(*heap));
64 list_init(&heap->custom_blocks);
65}
static void list_init(struct list_entry *head)
Definition: list.h:51

Referenced by alloc_vbscode(), compile_script(), create_regexp(), exec_script(), heap_pool_free(), init_code(), JScriptParse_InitNew(), release_script(), and VBScriptFactory_CreateInstance().

◆ heap_pool_mark()

heap_pool_t * heap_pool_mark ( heap_pool_t heap)

Definition at line 174 of file vbscript_main.c.

175{
176 if(heap->mark)
177 return NULL;
178
179 heap->mark = TRUE;
180 return heap;
181}

Referenced by 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

◆ vbscript_hinstance

HINSTANCE vbscript_hinstance
static

◆ VBScriptFactory

IClassFactory VBScriptFactory = { &VBScriptFactoryVtbl }
static

Definition at line 230 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:930
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 222 of file vbscript_main.c.

◆ VBScriptRegExpFactory

IClassFactory VBScriptRegExpFactory = { &VBScriptRegExpFactoryVtbl }
static

Definition at line 240 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:1618

Definition at line 232 of file vbscript_main.c.