From: Francis De Brabandere <francisdb@gmail.com> --- dlls/vbscript/global.c | 24 ++++++++++++++++++++++-- dlls/vbscript/tests/api.vbs | 8 ++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/dlls/vbscript/global.c b/dlls/vbscript/global.c index cb2d554cccf..32cf7c5cd2b 100644 --- a/dlls/vbscript/global.c +++ b/dlls/vbscript/global.c @@ -1298,8 +1298,28 @@ static HRESULT Global_Len(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA static HRESULT Global_LenB(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VARIANT *res) { - FIXME("\n"); - return E_NOTIMPL; + DWORD len; + HRESULT hres; + + TRACE("%s\n", debugstr_variant(arg)); + + if(V_VT(arg) == VT_NULL) + return return_null(res); + + if(V_VT(arg) != VT_BSTR) { + BSTR str; + + hres = to_string(This->ctx->lcid, arg, &str); + if(FAILED(hres)) + return hres; + + len = SysStringByteLen(str); + SysFreeString(str); + }else { + len = SysStringByteLen(V_BSTR(arg)); + } + + return return_int(res, len); } static HRESULT Global_Left(BuiltinDisp *This, VARIANT *args, unsigned args_cnt, VARIANT *res) diff --git a/dlls/vbscript/tests/api.vbs b/dlls/vbscript/tests/api.vbs index 4e62e7655d3..257d7c428d0 100644 --- a/dlls/vbscript/tests/api.vbs +++ b/dlls/vbscript/tests/api.vbs @@ -2952,4 +2952,12 @@ call testSetLocaleError() SetLocale(origLocale) Call ok(GetLocale() = origLocale, "GetLocale() after restore = " & GetLocale() & " expected " & origLocale) +' LenB tests +Call ok(LenB("") = 0, "LenB("""") = " & LenB("")) +Call ok(LenB("A") = 2, "LenB(""A"") = " & LenB("A")) +Call ok(LenB("ABC") = 6, "LenB(""ABC"") = " & LenB("ABC")) +Call ok(LenB("hello") = 10, "LenB(""hello"") = " & LenB("hello")) +Call ok(getVT(LenB("A")) = "VT_I4", "getVT(LenB) = " & getVT(LenB("A"))) +Call ok(IsNull(LenB(Null)), "LenB(Null) should be Null") + Call reportSuccess() -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10510