SHChangeNotify should use SHSimpleIDListFromPath as this function
should not fail on paths that do not exist anymore.
diff --git a/dlls/shell32/changenotify.c b/dlls/shell32/changenotify.c
index faf6a26..258f542 100644
--- a/dlls/shell32/changenotify.c
+++ b/dlls/shell32/changenotify.c
@@ -276,7 +276,6 @@
{
LPITEMIDLIST Pidls[2];
LPNOTIFICATIONLIST ptr;
- DWORD dummy;
UINT typeFlag = uFlags & SHCNF_TYPE;
Pidls[0] = NULL;
@@ -313,12 +312,12 @@
switch (typeFlag)
{
case SHCNF_PATHA:
- if (dwItem1) SHILCreateFromPathA((LPCSTR)dwItem1, &Pidls[0], &dummy);
- if (dwItem2) SHILCreateFromPathA((LPCSTR)dwItem2, &Pidls[1], &dummy);
+ if (dwItem1) Pidls[0] = SHSimpleIDListFromPathA((LPCSTR)dwItem1);
+ if (dwItem2) Pidls[1] = SHSimpleIDListFromPathA((LPCSTR)dwItem2);
break;
case SHCNF_PATHW:
- if (dwItem1) SHILCreateFromPathW((LPCWSTR)dwItem1, &Pidls[0], &dummy);
- if (dwItem2) SHILCreateFromPathW((LPCWSTR)dwItem2, &Pidls[1], &dummy);
+ if (dwItem1) Pidls[0] = SHSimpleIDListFromPathW((LPCWSTR)dwItem1);
+ if (dwItem2) Pidls[1] = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
break;
case SHCNF_IDLIST:
Pidls[0] = (LPITEMIDLIST)dwItem1;
@@ -392,8 +391,8 @@
TRACE("notify Done\n");
LeaveCriticalSection(&SHELL32_ChangenotifyCS);
- /* if we allocated it, free it */
- if ((typeFlag == SHCNF_PATHA) || (typeFlag == SHCNF_PATHW))
+ /* if we allocated it, free it. The ANSI flag is also set in its Unicode sibling. */
+ if ((typeFlag & SHCNF_PATHA) || (typeFlag & SHCNF_PRINTERA))
{
if (Pidls[0]) SHFree(Pidls[0]);
if (Pidls[1]) SHFree(Pidls[1]);