On 14.07.2015 18:07, Jonas Kümmerlin wrote:
Hi, Jonas, and welcome.
I don't know much about AppUserModelID, but still some comments on your patches:
- case VT_LPSTR:
*pcch = MultiByteToWideChar(CP_ACP, 0, propvarIn->u.pszVal, -1, NULL, 0);
break;
You sure it's meant to be WCHAR even for VT_LPSTR type? This looks wrong to me.
- case VT_LPSTR:
- {
UINT len = MultiByteToWideChar(CP_ACP, 0, propvar->u.pszVal, -1, NULL, 0);
if (len == 0)
{
hr = E_FAIL;
break;
}
if (len < cch)
{
MultiByteToWideChar(CP_ACP, 0, propvar->u.pszVal, -1, buf, len+1);
}
else
{
/* TODO: allocate large buffer, copy truncated result */
FIXME("Truncating narrow string not implemented\n");
hr = E_NOTIMPL;
}
break;
- }
Same.
+/* FIXME: It is 2015, why do I have to write this? */ +static UINT i64_to_wstr(LONGLONG llVal, WCHAR *buf)
Maybe you could reuse VarBstrFromUI8() from oleaut32?
if (len < cch)
{
memcpy(buf, propvar->u.bstrVal, len*sizeof(WCHAR));
buf[len] = 0;
}
Isn't it what strcpyW does? This pattern appears in several places.
- hr = PropVariantToString_Size(prop, &size);
- if (FAILED(hr))
return hr;
- *pbuf = CoTaskMemAlloc((size+1) * sizeof(WCHAR));
- if (!*pbuf)
return E_OUTOFMEMORY;
- hr = PropVariantToString(prop, *pbuf, size+1);
- if (FAILED(hr))
- {
CoTaskMemFree(*pbuf);
*pbuf = NULL;
- }
- return hr;
It's the only place where PropVariantToString_Size is used, so you could as well return full length from it.
- ULONGLONG ullVal = 0xDEAFBABECAFEBEEF;
I think we prefer lower case hex literals these days.