Michael Stefaniuc wrote:
I just stumbled upon those while researching a potential problem for which Smatch issued a warning. [...] @@ -1324,7 +1324,7 @@ HDDEDATA WINAPI DdeAddData(HDDEDATA hData, LPBYTE pSrc, DWORD cb, DWORD cbOff) if (new_sz > old_sz) { DdeUnaccessData(hData);
hData = GlobalReAlloc((HGLOBAL)hData, new_sz +
sizeof(DDE_DATAHANDLE_HEAD),
hData = GlobalReAlloc(hData, new_sz + sizeof(DDE_DATAHANDLE_HEAD),
[...]
Hi,
In general, I have left the casts in where one PVOID-type handle was cast as another, e.g. HMODULE as HANDLE: I wasn't sure if strict typing might (one day) be an issue. AFAIK, my only transgressions were when I removed the casts from the return values of some {Local|Global}Alloc() and family functions, where they, strictly speaking, return a handle, not a literal PVOID, so arguably should be cast. For example:
PSID pSid = (PSID)LocalAlloc(0, cBytes);
Since LocalAlloc() returns a HLOCAL - which just happens to be a PVOID - one might argue that the cast should remain. As another example of type-equivalence versus -distinction, DWORD and ULONG are both defined as unsigned long, but I have currently left them as distinct types, too.
I would be glad for feedback on how type-strict we should be, please.
Thanks,