RFC: Standardize paths in shell32.SHChangeNotify [Bug 18606]

Andrew Eikum aeikum at codeweavers.com
Mon Jun 14 15:47:36 CDT 2010


Hey folks,

I have a fix here for bug 18606.  I think it's decent, but I could use 
another few sets of eyes to make sure I didn't miss anything, or even 
that I'm not way on the wrong track.

The problem and solution are described in patch 3.  In brief, 
SHChangeNotify notifies windows when a change to the filesystem occurs 
that the window asked to be notified about.  For example, a window might 
tell SHChangeNotifyRegister "Inform me about changes to C:\".

Bug 18606 occurs because the new directory is passed to SHChangeNotify 
as '/home/user/.wine/drive_c/New Directory', which doesn't match the 
IDList created for 'C:\'.  This patchset fixes that by converting all 
paths in SHChangeNotify to UNIX paths, resolving symlinks etc, and 
comparing the ID lists created from those paths.  That way, the paths 
being compared are standardized and compared fairly.

Unfortunately, this is hard to write tests for.  You'd have to make an 
ID list that is significantly different from the one 
SHChangeNotifyRegister will create, but that actually refers to the same 
directory.  This is easy in Wine, but less obvious in Windows. 
Suggestions for how to accomplish this are welcome.  Logically, though, 
I think the problem and solution make sense.

Please take a look.  Any feedback is appreciated.

Andrew


More information about the wine-devel mailing list