[PATCH 1/2] propsys: Implement VariantToStringWithDefault.
Mohamad Al-Jaf
mohamadaljaf at gmail.com
Thu Mar 24 20:44:13 CDT 2022
IE8 runtime calls upon this function and crashes
without it.
Signed-off-by: Mohamad Al-Jaf <mohamadaljaf at gmail.com>
---
Kept the same naming convention as the other functions
for consistency.
---
dlls/propsys/propsys.spec | 2 +-
dlls/propsys/propvar.c | 17 +++++++++++++++++
include/propvarutil.h | 6 ++++++
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index 15749952e95..7391cf4aaa2 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
@@ -194,7 +194,7 @@
@ stub VariantToStringAlloc
@ stub VariantToStringArray
@ stub VariantToStringArrayAlloc
-@ stub VariantToStringWithDefault
+@ stdcall VariantToStringWithDefault(ptr wstr)
@ stub VariantToUInt16
@ stub VariantToUInt16Array
@ stub VariantToUInt16ArrayAlloc
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index 8f6c52f7aa7..18953cf381e 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -416,6 +416,23 @@ PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR p
return pszDefault;
}
+/******************************************************************
+ * VariantToStringWithDefault (PROPSYS.@)
+ */
+PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault)
+{
+ TRACE("(%p, %s)\n", pvar, debugstr_w(pszDefault));
+
+ if (V_VT(pvar) == VT_BSTR)
+ {
+ if (V_BSTR(pvar) == NULL)
+ return L"";
+
+ return V_BSTR(pvar);
+ }
+
+ return pszDefault;
+}
/******************************************************************
* PropVariantChangeType (PROPSYS.@)
diff --git a/include/propvarutil.h b/include/propvarutil.h
index 36a670f56e6..c8c9bae31e0 100644
--- a/include/propvarutil.h
+++ b/include/propvarutil.h
@@ -93,6 +93,7 @@ HRESULT WINAPI PropVariantToBoolean(REFPROPVARIANT propvarIn, BOOL *ret);
HRESULT WINAPI PropVariantToBuffer(REFPROPVARIANT propvarIn, void *ret, UINT cb);
HRESULT WINAPI PropVariantToString(REFPROPVARIANT propvarIn, PWSTR ret, UINT cch);
PCWSTR WINAPI PropVariantToStringWithDefault(REFPROPVARIANT propvarIn, LPCWSTR pszDefault);
+PCWSTR WINAPI VariantToStringWithDefault(const VARIANT *pvar, LPCWSTR pszDefault);
HRESULT WINAPI PropVariantToStringAlloc(REFPROPVARIANT propvarIn, WCHAR **ret);
@@ -201,6 +202,11 @@ inline BOOL IsPropVariantString(REFPROPVARIANT propvar)
return (PropVariantToStringWithDefault(propvar, NULL) != NULL);
}
+inline BOOL IsVariantString(const VARIANT *var)
+{
+ return (VariantToStringWithDefault(var, NULL) != NULL);
+}
+
#endif /* NO_PROPVAR_INLINES */
#endif /* __cplusplus */
--
2.35.1
More information about the wine-devel
mailing list