wscript: Implemented Host_get_ScriptName.
This commit is contained in:
parent
6afb5f0782
commit
bf331f8dca
@ -163,8 +163,15 @@ static HRESULT WINAPI Host_Quit(IHost *iface, int ExitCode)
|
|||||||
|
|
||||||
static HRESULT WINAPI Host_get_ScriptName(IHost *iface, BSTR *out_ScriptName)
|
static HRESULT WINAPI Host_get_ScriptName(IHost *iface, BSTR *out_ScriptName)
|
||||||
{
|
{
|
||||||
WINE_FIXME("(%p)\n", out_ScriptName);
|
WCHAR *scriptName;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
WINE_TRACE("(%p)\n", out_ScriptName);
|
||||||
|
|
||||||
|
scriptName = strrchrW(scriptFullName, '\\');
|
||||||
|
++scriptName;
|
||||||
|
if(!(*out_ScriptName = SysAllocString(scriptName)))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI Host_get_ScriptFullName(IHost *iface, BSTR *out_ScriptFullName)
|
static HRESULT WINAPI Host_get_ScriptFullName(IHost *iface, BSTR *out_ScriptFullName)
|
||||||
|
@ -36,6 +36,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wscript);
|
|||||||
|
|
||||||
static const WCHAR wscriptW[] = {'W','S','c','r','i','p','t',0};
|
static const WCHAR wscriptW[] = {'W','S','c','r','i','p','t',0};
|
||||||
static const WCHAR wshW[] = {'W','S','H',0};
|
static const WCHAR wshW[] = {'W','S','H',0};
|
||||||
|
WCHAR scriptFullName[MAX_PATH];
|
||||||
|
|
||||||
ITypeInfo *host_ti;
|
ITypeInfo *host_ti;
|
||||||
|
|
||||||
@ -326,6 +327,7 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
|
|||||||
WCHAR **argv;
|
WCHAR **argv;
|
||||||
CLSID clsid;
|
CLSID clsid;
|
||||||
int argc, i;
|
int argc, i;
|
||||||
|
DWORD res;
|
||||||
|
|
||||||
WINE_TRACE("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
|
WINE_TRACE("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
|
||||||
|
|
||||||
@ -346,6 +348,9 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
|
|||||||
WINE_FIXME("No file name specified\n");
|
WINE_FIXME("No file name specified\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
res = GetFullPathNameW(filename, sizeof(scriptFullName)/sizeof(WCHAR), scriptFullName, NULL);
|
||||||
|
if(!res || res > sizeof(scriptFullName)/sizeof(WCHAR))
|
||||||
|
return 1;
|
||||||
|
|
||||||
ext = strchrW(filename, '.');
|
ext = strchrW(filename, '.');
|
||||||
if(!ext)
|
if(!ext)
|
||||||
|
@ -61,6 +61,7 @@ DEFINE_EXPECT(reportSuccess);
|
|||||||
#define DISPID_TESTOBJ_REPORTSUCCESS 10002
|
#define DISPID_TESTOBJ_REPORTSUCCESS 10002
|
||||||
#define DISPID_TESTOBJ_WSCRIPTFULLNAME 10003
|
#define DISPID_TESTOBJ_WSCRIPTFULLNAME 10003
|
||||||
#define DISPID_TESTOBJ_WSCRIPTPATH 10004
|
#define DISPID_TESTOBJ_WSCRIPTPATH 10004
|
||||||
|
#define DISPID_TESTOBJ_WSCRIPTSCRIPTNAME 10005
|
||||||
|
|
||||||
#define TESTOBJ_CLSID "{178fc166-f585-4e24-9c13-4bb7faf80646}"
|
#define TESTOBJ_CLSID "{178fc166-f585-4e24-9c13-4bb7faf80646}"
|
||||||
|
|
||||||
@ -87,6 +88,18 @@ static const WCHAR* mystrrchr(const WCHAR *str, WCHAR ch)
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BSTR a2bstr(const char *str)
|
||||||
|
{
|
||||||
|
BSTR ret;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
||||||
|
ret = SysAllocStringLen(NULL, len-1);
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI Dispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDispatch)) {
|
if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDispatch)) {
|
||||||
@ -137,6 +150,8 @@ static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid,
|
|||||||
rgDispId[i] = DISPID_TESTOBJ_WSCRIPTFULLNAME;
|
rgDispId[i] = DISPID_TESTOBJ_WSCRIPTFULLNAME;
|
||||||
}else if(!strcmp_wa(rgszNames[i], "wscriptPath")) {
|
}else if(!strcmp_wa(rgszNames[i], "wscriptPath")) {
|
||||||
rgDispId[i] = DISPID_TESTOBJ_WSCRIPTPATH;
|
rgDispId[i] = DISPID_TESTOBJ_WSCRIPTPATH;
|
||||||
|
}else if(!strcmp_wa(rgszNames[i], "wscriptScriptName")) {
|
||||||
|
rgDispId[i] = DISPID_TESTOBJ_WSCRIPTSCRIPTNAME;
|
||||||
}else {
|
}else {
|
||||||
ok(0, "unexpected name %s\n", wine_dbgstr_w(rgszNames[i]));
|
ok(0, "unexpected name %s\n", wine_dbgstr_w(rgszNames[i]));
|
||||||
return DISP_E_UNKNOWNNAME;
|
return DISP_E_UNKNOWNNAME;
|
||||||
@ -214,6 +229,23 @@ static HRESULT WINAPI Dispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REF
|
|||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DISPID_TESTOBJ_WSCRIPTSCRIPTNAME:
|
||||||
|
{
|
||||||
|
char fullPath[MAX_PATH];
|
||||||
|
char *pos;
|
||||||
|
long res;
|
||||||
|
|
||||||
|
ok(wFlags == INVOKE_PROPERTYGET, "wFlags = %x\n", wFlags);
|
||||||
|
ok(pdp->cArgs == 0, "cArgs = %d\n", pdp->cArgs);
|
||||||
|
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||||
|
V_VT(pVarResult) = VT_BSTR;
|
||||||
|
res = GetFullPathNameA(script_name, sizeof(fullPath)/sizeof(WCHAR), fullPath, &pos);
|
||||||
|
if(!res || res > sizeof(fullPath)/sizeof(WCHAR))
|
||||||
|
return E_FAIL;
|
||||||
|
if(!(V_BSTR(pVarResult) = SysAllocString(a2bstr(pos))))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
ok(0, "unexpected dispIdMember %d\n", dispIdMember);
|
ok(0, "unexpected dispIdMember %d\n", dispIdMember);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
|
@ -30,5 +30,6 @@ ok(typeof(WScript.Version) === "string", "typeof(WScript.Version) = " + typeof(W
|
|||||||
ok(typeof(WScript.BuildVersion) === "number", "typeof(WScript.BuldVersion) = " + typeof(WScript.BuldVersion));
|
ok(typeof(WScript.BuildVersion) === "number", "typeof(WScript.BuldVersion) = " + typeof(WScript.BuldVersion));
|
||||||
ok(WScript.FullName === winetest.wscriptFullName, "WScript.FullName = ", WScript.FullName);
|
ok(WScript.FullName === winetest.wscriptFullName, "WScript.FullName = ", WScript.FullName);
|
||||||
ok(WScript.Path === winetest.wscriptPath, "WScript.Path = ", WScript.Path);
|
ok(WScript.Path === winetest.wscriptPath, "WScript.Path = ", WScript.Path);
|
||||||
|
ok(WScript.ScriptName === winetest.wscriptScriptName, "WScript.ScriptName = " + WScript.ScriptName);
|
||||||
|
|
||||||
winetest.reportSuccess();
|
winetest.reportSuccess();
|
||||||
|
@ -21,3 +21,5 @@
|
|||||||
extern IHost host_obj;
|
extern IHost host_obj;
|
||||||
|
|
||||||
extern ITypeInfo *host_ti;
|
extern ITypeInfo *host_ti;
|
||||||
|
|
||||||
|
extern WCHAR scriptFullName[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user