ReactOS 0.4.17-dev-357-ga8f14ff
jscript_main.c File Reference
#include "initguid.h"
#include "jscript.h"
#include "winreg.h"
#include "advpub.h"
#include "activaut.h"
#include "objsafe.h"
#include "mshtmhst.h"
#include "rpcproxy.h"
#include "jscript_classes.h"
#include "jsdisp.h"
#include "wine/debug.h"
Include dependency graph for jscript_main.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
 DEFINE_GUID (GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
 
static int weak_refs_compare (const void *key, const struct rb_entry *entry)
 
struct thread_dataget_thread_data (void)
 
void release_thread_data (struct thread_data *thread_data)
 
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)
 
static HRESULT WINAPI JScriptFactory_CreateInstance (IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 
static HRESULT WINAPI JScriptEncodeFactory_CreateInstance (IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 
BOOL WINAPI DllMain (HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 
HRESULT WINAPI DllCanUnloadNow (void)
 

Variables

LONG module_ref = 0
 
HINSTANCE jscript_hinstance
 
static DWORD jscript_tls
 
static ITypeInfodispatch_typeinfo
 
static const IClassFactoryVtbl JScriptFactoryVtbl
 
static IClassFactory JScriptFactory = { &JScriptFactoryVtbl }
 
static const IClassFactoryVtbl JScriptEncodeFactoryVtbl
 
static IClassFactory JScriptEncodeFactory = { &JScriptEncodeFactoryVtbl }
 

Function Documentation

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory iface)
static

Definition at line 122 of file jscript_main.c.

123{
124 TRACE("(%p)\n", iface);
125 return 2;
126}
#define TRACE(s)
Definition: solgame.cpp:4

◆ ClassFactory_LockServer()

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

Definition at line 134 of file jscript_main.c.

135{
136 TRACE("(%p)->(%x)\n", iface, fLock);
137
138 if(fLock)
139 lock_module();
140 else
142
143 return S_OK;
144}
static void lock_module(void)
Definition: ieframe.h:335
static void unlock_module(void)
Definition: ieframe.h:339
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

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

Definition at line 101 of file jscript_main.c.

102{
103 *ppv = NULL;
104
106 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
107 *ppv = iface;
108 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
109 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
110 *ppv = iface;
111 }
112
113 if(*ppv) {
114 IUnknown_AddRef((IUnknown*)*ppv);
115 return S_OK;
116 }
117
118 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
119 return E_NOINTERFACE;
120}
#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 128 of file jscript_main.c.

129{
130 TRACE("(%p)\n", iface);
131 return 1;
132}

◆ DEFINE_GUID()

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

◆ DllCanUnloadNow()

HRESULT WINAPI DllCanUnloadNow ( void  )

Definition at line 240 of file jscript_main.c.

241{
242 TRACE("() ref=%ld\n", module_ref);
243
244 return module_ref ? S_FALSE : S_OK;
245}
LONG module_ref
Definition: jscript_main.c:36
#define S_FALSE
Definition: winerror.h:3451

◆ DllGetClassObject()

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

Definition at line 221 of file jscript_main.c.

222{
223 if(IsEqualGUID(&CLSID_JScript, rclsid)) {
224 TRACE("(CLSID_JScript %s %p)\n", debugstr_guid(riid), ppv);
225 return IClassFactory_QueryInterface(&JScriptFactory, riid, ppv);
226 }
227
228 if(IsEqualGUID(&CLSID_JScriptEncode, rclsid)) {
229 TRACE("(CLSID_JScriptEncode %s %p)\n", debugstr_guid(riid), ppv);
230 return IClassFactory_QueryInterface(&JScriptEncodeFactory, riid, ppv);
231 }
232
233 FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
235}
static IClassFactory JScriptEncodeFactory
Definition: jscript_main.c:190
static IClassFactory JScriptFactory
Definition: jscript_main.c:167
static const CLSID CLSID_JScript
Definition: activex.c:57
static const CLSID CLSID_JScriptEncode
Definition: jscript.c:55
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ DllMain()

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

Definition at line 195 of file jscript_main.c.

196{
197 TRACE("(%p %ld %p)\n", hInstDLL, fdwReason, lpv);
198
199 switch(fdwReason) {
202 jscript_hinstance = hInstDLL;
205 return FALSE;
206 break;
208 if (lpv) break;
209 if (dispatch_typeinfo) ITypeInfo_Release(dispatch_typeinfo);
211 free_strings();
212 break;
213 }
214
215 return TRUE;
216}
static DWORD const fdwReason
#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
BOOL WINAPI TlsFree(IN DWORD Index)
Definition: thread.c:1166
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
Definition: thread.c:657
static ITypeInfo * dispatch_typeinfo
Definition: jscript_main.c:42
HINSTANCE jscript_hinstance
Definition: jscript_main.c:40
static DWORD jscript_tls
Definition: jscript_main.c:41
BOOL init_strings(void)
Definition: jsstr.c:320
void free_strings(void)
Definition: jsstr.c:335
#define TLS_OUT_OF_INDEXES
Definition: winbase.h:529

◆ get_dispatch_typeinfo()

HRESULT get_dispatch_typeinfo ( ITypeInfo **  out)

Definition at line 78 of file jscript_main.c.

79{
82 HRESULT hr;
83
85 {
87 if (FAILED(hr)) return hr;
88
89 hr = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IDispatch, &typeinfo);
90 ITypeLib_Release(typelib);
91 if (FAILED(hr)) return hr;
92
94 ITypeInfo_Release(typeinfo);
95 }
96
98 return S_OK;
99}
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

◆ get_thread_data()

struct thread_data * get_thread_data ( void  )

Definition at line 51 of file jscript_main.c.

52{
54
55 if(!thread_data) {
56 thread_data = calloc(1, sizeof(struct thread_data));
57 if(!thread_data)
58 return NULL;
63 }
64
66 return thread_data;
67}
static void list_init(struct list_entry *head)
Definition: list.h:51
LPVOID WINAPI TlsGetValue(IN DWORD Index)
Definition: thread.c:1240
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
Definition: thread.c:1276
static int weak_refs_compare(const void *key, const struct rb_entry *entry)
Definition: jscript_main.c:44
#define calloc
Definition: rosglue.h:14
static void rb_init(struct rb_tree *tree, rb_compare_func_t compare)
Definition: rbtree.h:173
LONG thread_id
Definition: jscript.h:137
struct list objects
Definition: jscript.h:142
LONG ref
Definition: jscript.h:136
struct rb_tree weak_refs
Definition: jscript.h:143
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459

Referenced by clear_task_timer(), flush_pending_tasks(), get_thread_hwnd(), JScript_SetScriptSite(), pop_task(), process_timer(), push_task(), remove_target_tasks(), set_task_timer(), and thread_detach().

◆ JScriptEncodeFactory_CreateInstance()

static HRESULT WINAPI JScriptEncodeFactory_CreateInstance ( IClassFactory iface,
IUnknown outer,
REFIID  riid,
void **  ppv 
)
static

Definition at line 169 of file jscript_main.c.

171{
172 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
173
174 if(outer) {
175 *ppv = NULL;
177 }
178
180}
HRESULT create_jscript_object(BOOL is_encode, REFIID riid, void **ppv)
Definition: jscript.c:1476
static IUnknown * outer
Definition: compobj.c:82
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ JScriptFactory_CreateInstance()

static HRESULT WINAPI JScriptFactory_CreateInstance ( IClassFactory iface,
IUnknown outer,
REFIID  riid,
void **  ppv 
)
static

Definition at line 146 of file jscript_main.c.

148{
149 TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
150
151 if(outer) {
152 *ppv = NULL;
154 }
155
157}

◆ release_thread_data()

void release_thread_data ( struct thread_data thread_data)

Definition at line 69 of file jscript_main.c.

70{
71 if(--thread_data->ref)
72 return;
73
76}
#define free
Definition: debug_ros.c:5

Referenced by decrease_state(), JScript_Release(), JScript_SetScriptSite(), and script_release().

◆ weak_refs_compare()

static int weak_refs_compare ( const void key,
const struct rb_entry entry 
)
static

Definition at line 44 of file jscript_main.c.

45{
48 return (a > b) - (a < b);
49}
#define ULONG_PTR
Definition: config.h:101
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
uint32_t entry
Definition: isohybrid.c:63
#define b
Definition: ke_i.h:79
#define RB_ENTRY_VALUE(element, type, field)
Definition: rbtree.h:26
Definition: copy.c:22
Definition: jscript.h:378
struct list list
Definition: jscript.h:380
Definition: jscript.h:446
#define LIST_ENTRY(type)
Definition: queue.h:175
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by get_thread_data().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ dispatch_typeinfo

ITypeInfo* dispatch_typeinfo
static

Definition at line 42 of file jscript_main.c.

Referenced by DllMain(), and get_dispatch_typeinfo().

◆ jscript_hinstance

HINSTANCE jscript_hinstance

Definition at line 40 of file jscript_main.c.

Referenced by DllMain(), format_error_message(), and set_error_location().

◆ jscript_tls

DWORD jscript_tls
static

Definition at line 41 of file jscript_main.c.

Referenced by DllMain(), get_thread_data(), and release_thread_data().

◆ JScriptEncodeFactory

IClassFactory JScriptEncodeFactory = { &JScriptEncodeFactoryVtbl }
static

Definition at line 190 of file jscript_main.c.

Referenced by DllGetClassObject().

◆ JScriptEncodeFactoryVtbl

const IClassFactoryVtbl JScriptEncodeFactoryVtbl
static
Initial value:
= {
}
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: jscript_main.c:134
static HRESULT WINAPI JScriptEncodeFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: jscript_main.c:169
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: jscript_main.c:128
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: jscript_main.c:101
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: jscript_main.c:122

Definition at line 182 of file jscript_main.c.

◆ JScriptFactory

IClassFactory JScriptFactory = { &JScriptFactoryVtbl }
static

Definition at line 167 of file jscript_main.c.

Referenced by DllGetClassObject().

◆ JScriptFactoryVtbl

const IClassFactoryVtbl JScriptFactoryVtbl
static
Initial value:
= {
}
static HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: jscript_main.c:146

Definition at line 159 of file jscript_main.c.

◆ module_ref

LONG module_ref = 0

Definition at line 36 of file jscript_main.c.

Referenced by DllCanUnloadNow(), lock_module(), and unlock_module().