[Bug 22974] "Shell folders" settings are reset after each wine update

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Mar 29 15:24:42 CDT 2017


https://bugs.winehq.org/show_bug.cgi?id=22974

--- Comment #18 from i.Dark_Templar <idarktemplar at mail.ru> ---
The function '_SHCreateSymbolicLinks' already exists in master branch, it's
defined around line 4250. And originally it was called around line 5961. It's
the function that currently reinitializes those "shell folders" in question.

This function is called during registry of shell32.dll, which happens on each
wine upgrade/reinstall or when 'wineboot -u' is called. Issue is caused by
function SHGetFolderPathAndSubDirW being called for some of shell folders with
flag CSIDL_FLAG_CREATE before function _SHCreateSymbolicLinks is called. Thus,
when function _SHCreateSymbolicLinks is called, some directories, like Desktop
or My documents, may already exist. To overcome that issue and initialize shell
folders by proper links, current code just removes current shell folders, and
reinitializes them to default locations. And it looks like it only removes
current shell folders if they're symlinks or empty directories. This causes the
current issue.

The proposed registry key solution may circumvent the issue by not allowing the
function _SHCreateSymbolicLinks to run on prefix upgrade and remove current
symlinks. My patch uses different approach. Instead of removing directories
after they're created and recreating them, right before shell directory is
being created in function SHGetFolderPathAndSubDirW (which shouldn't happen too
often) the initial symlinks setup is performed to make sure that shell folders
are properly set up.

Since _SHCreateSymbolicLinks calls function SHGetFolderPathAndSubDirW via
function SHGetFolderPathW I had to remove flag CSIDL_FLAG_CREATE from calls in
that function and correspondingly modify return code checks. Otherwise it'd
cause infinite recursion and finally a crash. Well, creation of directory is
not what is desired at that point anyway, just it's path is needed.

I prefer tabs over spaces for identation, due to that my editors are set up to
ident with tabs, and it looks like I added some lines with them. As for
directory permissions, I just made them what is usually proposed as safe
defaults.

Please feel free to modify any parts of patch you think should be modified or
use different approach entirely if you think this one is undesired.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list