From: Paul Gofman pgofman@codeweavers.com
--- programs/wmic/main.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)
diff --git a/programs/wmic/main.c b/programs/wmic/main.c index e0ba498e5f6..c8ded9d85c2 100644 --- a/programs/wmic/main.c +++ b/programs/wmic/main.c @@ -172,6 +172,45 @@ static void convert_to_bstr( VARIANT *v )
if (SUCCEEDED(VariantChangeType( v, v, 0, VT_BSTR ))) return; vt = V_VT(v); + if (vt == (VT_ARRAY | VT_BSTR)) + { + unsigned int i, count, len; + BSTR *strings; + BSTR out; + + if (FAILED(SafeArrayAccessData( V_ARRAY(v), (void **)&strings ))) + { + WINE_ERR( "Could not access array.\n" ); + goto done; + } + count = V_ARRAY(v)->rgsabound->cElements; + len = 0; + for (i = 0; i < count; ++i) + len += wcslen( strings[i] ); + len += count * 2 + 2; + if (count) len += 2 * (count - 1); + V_VT(v) = VT_BSTR; + V_BSTR(v) = out = SysAllocStringLen( NULL, len ); + *out++ = '{'; + for (i = 0; i < count; ++i) + { + if (i) + { + memcpy( out, L", ", 2 * sizeof(*out) ); + out += 2; + } + *out++ = '"'; + len = wcslen( strings[i] ); + memcpy( out, strings[i], len * sizeof(*out) ); + out += len; + *out++ = '"'; + } + *out++ = '}'; + *out = 0; + SafeArrayUnaccessData( V_ARRAY(v) ); + return; + } +done: VariantClear( v ); V_VT(v) = VT_BSTR; V_BSTR(v) = SysAllocString( L"" );