Commit bf331f8d authored by Michał Ziętek's avatar Michał Ziętek Committed by Alexandre Julliard

wscript: Implemented Host_get_ScriptName.

parent 6afb5f07
...@@ -163,8 +163,15 @@ static HRESULT WINAPI Host_Quit(IHost *iface, int ExitCode) ...@@ -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); ...@@ -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 ...@@ -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 ...@@ -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); ...@@ -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) ...@@ -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, ...@@ -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 ...@@ -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 ...@@ -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 @@ ...@@ -21,3 +21,5 @@
extern IHost host_obj; extern IHost host_obj;
extern ITypeInfo *host_ti; extern ITypeInfo *host_ti;
extern WCHAR scriptFullName[];
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment