[PATCH v2 1/2] propsys: Implement VariantToStringWithDefault.
Nikolay Sivov
nsivov at codeweavers.com
Mon Mar 28 00:13:14 CDT 2022
On 3/28/22 03:16, Mohamad Al-Jaf wrote:
> +/******************************************************************
> + * VariantToStringWithDefault (PROPSYS.@)
> + */
> +PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault)
> +{
> + TRACE("(%p, %s)\n", pvar, debugstr_w(pszDefault));
> +
> + switch(V_VT(pvar))
> + {
> + case VT_BSTR:
> + {
> + if (V_BSTR(pvar) == NULL)
> + return L"";
> +
> + return V_BSTR(pvar);
> + }
> + case VT_BYREF | VT_BSTR:
> + {
> + if (*V_BSTRREF(pvar) == NULL)
> + return L"";
> +
> + return *V_BSTRREF(pvar);
> + }
> + case VT_BYREF | VT_VARIANT:
> + {
> + if (V_VT(V_VARIANTREF(pvar)) == VT_BSTR)
> + {
> + if (V_BSTR(V_VARIANTREF(pvar)) == NULL)
> + return L"";
> +
> + return V_BSTR(V_VARIANTREF(pvar));
> + }
> +
> + if (V_VT(V_VARIANTREF(pvar)) == (VT_BYREF | VT_BSTR))
> + {
> + if (*V_BSTRREF(V_VARIANTREF(pvar)) == NULL)
> + return L"";
> +
> + return *V_BSTRREF(V_VARIANTREF(pvar));
> + }
> + }
> + }
> +
> + return pszDefault;
> +}
There is a lot of duplication you don't need. You can first dereference
a variant if needed, and then use same path for both plain variant and
variant reference. Similar for BSTR references.
More information about the wine-devel
mailing list