Signed-off-by: Andrew Eikum aeikum@codeweavers.com ---
The actual path changes were in the previous patch. This one just de-duplicates some static data.
dlls/shell32/shellpath.c | 249 ++++++++++++++------------------------- 1 file changed, 89 insertions(+), 160 deletions(-)
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index b6af8f6f45a..3be759bf616 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -832,21 +832,8 @@ static const WCHAR AppUpdatesFolderW[] = {'A','p','p','U','p','d','a','t','e','s static const WCHAR Administrative_ToolsW[] = {'A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}; static const WCHAR AppDataW[] = {'A','p','p','D','a','t','a','\0'}; static const WCHAR AppData_RoamingW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\0'}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Network_ShortcutsW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','N','e','t','w','o','r','k',' ','S','h','o','r','t','c','u','t','s',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Printer_ShortcutsW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','P','r','i','n','t','e','r',' ','S','h','o','r','t','c','u','t','s',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_RecentW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','R','e','c','e','n','t',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_SendToW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','e','n','d','T','o',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Start_MenuW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Start_Menu_ProgramsW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Start_Menu_Programs_StartupW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s','\','S','t','a','r','t','u','p',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_Start_Menu_Programs_Administrative_ToolsW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s','\','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s',0}; -static const WCHAR AppData_Roaming_Microsoft_Windows_TemplatesW[] = {'A','p','p','D','a','t','a','\','R','o','a','m','i','n','g','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','T','e','m','p','l','a','t','e','s',0}; static const WCHAR AppData_LocalLowW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','L','o','w','\0'}; static const WCHAR AppData_LocalW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','\0'}; -static const WCHAR AppData_Local_Microsoft_Windows_Burn_BurnW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','B','u','r','n','\','B','u','r','n',0}; -static const WCHAR AppData_Local_Microsoft_Windows_HistoryW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','H','i','s','t','o','r','y',0}; -static const WCHAR AppData_Local_Microsoft_Windows_INetCacheW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','I','N','e','t','C','a','c','h','e',0}; -static const WCHAR AppData_Local_Microsoft_Windows_INetCookiesW[] = {'A','p','p','D','a','t','a','\','L','o','c','a','l','\','M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','I','N','e','t','C','o','o','k','i','e','s',0}; static const WCHAR CacheW[] = {'C','a','c','h','e','\0'}; static const WCHAR CD_BurningW[] = {'C','D',' ','B','u','r','n','i','n','g','\0'}; static const WCHAR ChangeRemoveProgramsFolderW[] = {'C','h','a','n','g','e','R','e','m','o','v','e','P','r','o','g','r','a','m','s','F','o','l','d','e','r',0}; @@ -912,18 +899,12 @@ static const WCHAR Microsoft_Windows_RingtonesW[] = {'M','i','c','r','o','s','o' static const WCHAR Microsoft_Windows_SendToW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','e','n','d','T','o',0}; static const WCHAR Microsoft_Windows_Sidebar_GadgetsW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s',' ','S','i','d','e','b','a','r','\','G','a','d','g','e','t','s',0}; static const WCHAR Microsoft_Windows_Start_MenuW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u',0}; -static const WCHAR Microsoft_Windows_Start_Menu_ProgramsW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s','\0'}; -static const WCHAR Microsoft_Windows_Start_Menu_Admin_ToolsW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s','\','A','d','m','i','n','i','s','t','r','a','t','i','v','e',' ','T','o','o','l','s','\0'}; -static const WCHAR Microsoft_Windows_Start_Menu_StartupW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','S','t','a','r','t',' ','M','e','n','u','\','P','r','o','g','r','a','m','s','\','S','t','a','r','t','U','p','\0'}; static const WCHAR Microsoft_Windows_TemplatesW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','T','e','m','p','l','a','t','e','s',0}; static const WCHAR Microsoft_Windows_ThemesW[] = {'M','i','c','r','o','s','o','f','t','\','W','i','n','d','o','w','s','\','T','h','e','m','e','s',0}; static const WCHAR MoviesW[] = {'M','o','v','i','e','s','\0'}; static const WCHAR MusicW[] = {'M','u','s','i','c','\0'}; static const WCHAR MusicLibraryW[] = {'M','u','s','i','c','L','i','b','r','a','r','y',0}; static const WCHAR Music_librarymsW[] = {'M','u','s','i','c','.','l','i','b','r','a','r','y','-','m','s',0}; -static const WCHAR Music_PlaylistsW[] = {'M','u','s','i','c','\','P','l','a','y','l','i','s','t','s','\0'}; -static const WCHAR Music_Sample_MusicW[] = {'M','u','s','i','c','\','S','a','m','p','l','e',' ','M','u','s','i','c','\0'}; -static const WCHAR Music_Sample_PlaylistsW[] = {'M','u','s','i','c','\','S','a','m','p','l','e',' ','P','l','a','y','l','i','s','t','s','\0'}; static const WCHAR My_MusicW[] = {'M','y',' ','M','u','s','i','c','\0'}; static const WCHAR My_PicturesW[] = {'M','y',' ','P','i','c','t','u','r','e','s','\0'}; static const WCHAR My_VideosW[] = {'M','y',' ','V','i','d','e','o','s','\0'}; @@ -938,8 +919,6 @@ static const WCHAR PhotoAlbumsW[] = {'P','h','o','t','o','A','l','b','u','m','s' static const WCHAR PicturesW[] = {'P','i','c','t','u','r','e','s','\0'}; static const WCHAR PicturesLibraryW[] = {'P','i','c','t','u','r','e','s','L','i','b','r','a','r','y',0}; static const WCHAR Pictures_librarymsW[] = {'P','i','c','t','u','r','e','s','.','l','i','b','r','a','r','y','-','m','s',0}; -static const WCHAR Pictures_Sample_PicturesW[] = {'P','i','c','t','u','r','e','s','\','S','a','m','p','l','e',' ','P','i','c','t','u','r','e','s','\0'}; -static const WCHAR Pictures_Slide_ShowsW[] = {'P','i','c','t','u','r','e','s','\','S','l','i','d','e',' ','S','h','o','w','s','\0'}; static const WCHAR PlaylistsW[] = {'P','l','a','y','l','i','s','t','s',0}; static const WCHAR PrintersFolderW[] = {'P','r','i','n','t','e','r','s','F','o','l','d','e','r',0}; static const WCHAR PrintHoodW[] = {'P','r','i','n','t','H','o','o','d','\0'}; @@ -1003,7 +982,6 @@ static const WCHAR UsersPublicW[] = {'u','s','e','r','s','\','P','u','b','l','i static const WCHAR VideosW[] = {'V','i','d','e','o','s','\0'}; static const WCHAR VideosLibraryW[] = {'V','i','d','e','o','s','L','i','b','r','a','r','y',0}; static const WCHAR Videos_librarymsW[] = {'V','i','d','e','o','s','.','l','i','b','r','a','r','y','-','m','s',0}; -static const WCHAR Videos_Sample_VideosW[] = {'V','i','d','e','o','s','\','S','a','m','p','l','e',' ','V','i','d','e','o','s','\0'}; static const WCHAR WindowsW[] = {'W','i','n','d','o','w','s',0}; static const WCHAR Windows_Sidebar_GadgetsW[] = {'W','i','n','d','o','w','s',' ','S','i','d','e','b','a','r','\','G','a','d','g','e','t','s',0}; static const WCHAR DefaultW[] = {'.','D','e','f','a','u','l','t','\0'}; @@ -1229,7 +1207,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Desktop, CSIDL_Type_User, DesktopW, - MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY), + NULL,
KF_CATEGORY_PERUSER, /* category */ DesktopW, /* name */ @@ -1269,7 +1247,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Programs, CSIDL_Type_User, ProgramsW, - AppData_Roaming_Microsoft_Windows_Start_Menu_ProgramsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ ProgramsW, /* name */ @@ -1329,7 +1307,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Documents, CSIDL_Type_User, PersonalW, - MAKEINTRESOURCEW(IDS_PERSONAL), + NULL,
KF_CATEGORY_PERUSER, /* category */ PersonalW, /* name */ @@ -1349,7 +1327,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Favorites, CSIDL_Type_User, FavoritesW, - FavoritesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ FavoritesW, /* name */ @@ -1369,7 +1347,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Startup, CSIDL_Type_User, StartUpW, - AppData_Roaming_Microsoft_Windows_Start_Menu_Programs_StartupW, + NULL,
KF_CATEGORY_PERUSER, /* category */ StartupW, /* name */ @@ -1389,7 +1367,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Recent, CSIDL_Type_User, RecentW, - AppData_Roaming_Microsoft_Windows_RecentW, + NULL,
KF_CATEGORY_PERUSER, /* category */ RecentW, /* name */ @@ -1409,7 +1387,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SendTo, CSIDL_Type_User, SendToW, - AppData_Roaming_Microsoft_Windows_SendToW, + NULL,
KF_CATEGORY_PERUSER, /* category */ SendToW, /* name */ @@ -1449,7 +1427,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_StartMenu, CSIDL_Type_User, Start_MenuW, - AppData_Roaming_Microsoft_Windows_Start_MenuW, + NULL,
KF_CATEGORY_PERUSER, /* category */ Start_MenuW, /* name */ @@ -1475,7 +1453,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Music, CSIDL_Type_User, My_MusicW, - MAKEINTRESOURCEW(IDS_MYMUSIC), + NULL,
KF_CATEGORY_PERUSER, /* category */ My_MusicW, /* name */ @@ -1495,7 +1473,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Videos, CSIDL_Type_User, My_VideosW, - MAKEINTRESOURCEW(IDS_MYVIDEOS), + NULL,
KF_CATEGORY_PERUSER, /* category */ My_VideoW, /* name */ @@ -1521,7 +1499,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Desktop, CSIDL_Type_User, DesktopW, - MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY), + NULL,
KF_CATEGORY_PERUSER, /* category */ DesktopW, /* name */ @@ -1581,7 +1559,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_NetHood, CSIDL_Type_User, NetHoodW, - AppData_Roaming_Microsoft_Windows_Network_ShortcutsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ NetHoodW, /* name */ @@ -1621,7 +1599,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Templates, CSIDL_Type_User, TemplatesW, - AppData_Roaming_Microsoft_Windows_TemplatesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ TemplatesW, /* name */ @@ -1641,7 +1619,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonStartMenu, CSIDL_Type_ProgramData, Common_Start_MenuW, - Microsoft_Windows_Start_MenuW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_Start_MenuW, /* name */ @@ -1661,7 +1639,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonPrograms, CSIDL_Type_ProgramData, Common_ProgramsW, - Microsoft_Windows_Start_Menu_ProgramsW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_ProgramsW, /* name */ @@ -1681,7 +1659,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonStartup, CSIDL_Type_ProgramData, Common_StartUpW, - Microsoft_Windows_Start_Menu_StartupW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_StartupW, /* name */ @@ -1701,7 +1679,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicDesktop, CSIDL_Type_AllUsers, Common_DesktopW, - MAKEINTRESOURCEW(IDS_DESKTOPDIRECTORY), + NULL,
KF_CATEGORY_COMMON, /* category */ Common_DesktopW, /* name */ @@ -1721,7 +1699,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_RoamingAppData, CSIDL_Type_User, AppDataW, - AppData_RoamingW, + NULL,
KF_CATEGORY_PERUSER, /* category */ AppDataW, /* name */ @@ -1741,7 +1719,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PrintHood, CSIDL_Type_User, PrintHoodW, - AppData_Roaming_Microsoft_Windows_Printer_ShortcutsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ PrintHoodW, /* name */ @@ -1761,7 +1739,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_LocalAppData, CSIDL_Type_User, Local_AppDataW, - AppData_LocalW, + NULL,
KF_CATEGORY_PERUSER, /* category */ Local_AppDataW, /* name */ @@ -1793,7 +1771,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Favorites, CSIDL_Type_AllUsers, Common_FavoritesW, - FavoritesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ FavoritesW, /* name */ @@ -1813,7 +1791,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_InternetCache, CSIDL_Type_User, CacheW, - AppData_Local_Microsoft_Windows_INetCacheW, + NULL,
KF_CATEGORY_PERUSER, /* category */ CacheW, /* name */ @@ -1833,7 +1811,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Cookies, CSIDL_Type_User, CookiesW, - AppData_Local_Microsoft_Windows_INetCookiesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ CookiesW, /* name */ @@ -1853,7 +1831,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_History, CSIDL_Type_User, HistoryW, - AppData_Local_Microsoft_Windows_HistoryW, + NULL,
KF_CATEGORY_PERUSER, /* category */ HistoryW, /* name */ @@ -1953,7 +1931,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Pictures, CSIDL_Type_User, My_PicturesW, - MAKEINTRESOURCEW(IDS_MYPICTURES), + NULL,
KF_CATEGORY_PERUSER, /* category */ My_PicturesW, /* name */ @@ -2073,7 +2051,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonTemplates, CSIDL_Type_ProgramData, Common_TemplatesW, - Microsoft_Windows_TemplatesW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_TemplatesW, /* name */ @@ -2093,7 +2071,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicDocuments, CSIDL_Type_AllUsers, Common_DocumentsW, - DocumentsW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_DocumentsW, /* name */ @@ -2113,7 +2091,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonAdminTools, CSIDL_Type_ProgramData, Common_Administrative_ToolsW, - Microsoft_Windows_Start_Menu_Admin_ToolsW, + NULL,
KF_CATEGORY_COMMON, /* category */ Common_Administrative_ToolsW, /* name */ @@ -2133,7 +2111,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_AdminTools, CSIDL_Type_User, Administrative_ToolsW, - AppData_Roaming_Microsoft_Windows_Start_Menu_Programs_Administrative_ToolsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ Administrative_ToolsW, /* name */ @@ -2191,7 +2169,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicMusic, CSIDL_Type_AllUsers, CommonMusicW, - MusicW, + NULL,
KF_CATEGORY_COMMON, /* category */ CommonMusicW, /* name */ @@ -2211,7 +2189,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicPictures, CSIDL_Type_AllUsers, CommonPicturesW, - PicturesW, + NULL,
KF_CATEGORY_COMMON, /* category */ CommonPicturesW, /* name */ @@ -2231,7 +2209,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicVideos, CSIDL_Type_AllUsers, CommonVideoW, - VideosW, + NULL,
KF_CATEGORY_COMMON, /* category */ CommonVideoW, /* name */ @@ -2291,7 +2269,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CommonOEMLinks, CSIDL_Type_ProgramData, NULL, - OEM_LinksW, + NULL,
KF_CATEGORY_COMMON, /* category */ OEM_LinksW, /* name */ @@ -2311,7 +2289,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_CDBurning, CSIDL_Type_User, CD_BurningW, - AppData_Local_Microsoft_Windows_Burn_BurnW, + NULL,
KF_CATEGORY_PERUSER, /* category */ CD_BurningW, /* name */ @@ -2429,7 +2407,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Contacts, CSIDL_Type_User, NULL, - ContactsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ ContactsW, /* name */ @@ -2495,7 +2473,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Downloads, CSIDL_Type_User, NULL, - DownloadsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ DownloadsW, /* name */ @@ -2615,7 +2593,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Links, CSIDL_Type_User, NULL, - LinksW, + NULL,
KF_CATEGORY_PERUSER, /* category */ LinksW, /* name */ @@ -2635,7 +2613,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_LocalAppDataLow, CSIDL_Type_User, NULL, - AppData_LocalLowW, + NULL,
KF_CATEGORY_PERUSER, /* category */ LocalAppDataLowW, /* name */ @@ -2695,7 +2673,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PhotoAlbums, CSIDL_Type_User, NULL, - Pictures_Slide_ShowsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ PhotoAlbumsW, /* name */ @@ -2735,7 +2713,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_Playlists, CSIDL_Type_User, NULL, - Music_PlaylistsW, + NULL,
KF_CATEGORY_PERUSER, /* category */ PlaylistsW, /* name */ @@ -2827,7 +2805,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicDownloads, CSIDL_Type_AllUsers, NULL, - DownloadsW, + NULL,
KF_CATEGORY_COMMON, /* category */ CommonDownloadsW, /* name */ @@ -2847,7 +2825,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicGameTasks, CSIDL_Type_ProgramData, NULL, - Microsoft_Windows_GameExplorerW, + NULL,
KF_CATEGORY_COMMON, /* category */ PublicGameTasksW, /* name */ @@ -2867,7 +2845,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicLibraries, CSIDL_Type_AllUsers, NULL, - Microsoft_Windows_LibrariesW, + NULL,
KF_CATEGORY_COMMON, /* category */ PublicLibrariesW, /* name */ @@ -2887,7 +2865,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_PublicRingtones, CSIDL_Type_ProgramData, NULL, - Microsoft_Windows_RingtonesW, + NULL,
KF_CATEGORY_COMMON, /* category */ CommonRingtonesW, /* name */ @@ -2967,7 +2945,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SampleMusic, CSIDL_Type_AllUsers, NULL, - Music_Sample_MusicW, + NULL,
KF_CATEGORY_COMMON, /* category */ SampleMusicW, /* name */ @@ -2987,7 +2965,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SamplePictures, CSIDL_Type_AllUsers, NULL, - Pictures_Sample_PicturesW, + NULL,
KF_CATEGORY_COMMON, /* category */ SamplePicturesW, /* name */ @@ -3007,7 +2985,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SamplePlaylists, CSIDL_Type_AllUsers, NULL, - Music_Sample_PlaylistsW, + NULL,
KF_CATEGORY_COMMON, /* category */ SamplePlaylistsW, /* name */ @@ -3027,7 +3005,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SampleVideos, CSIDL_Type_AllUsers, NULL, - Videos_Sample_VideosW, + NULL,
KF_CATEGORY_COMMON, /* category */ SampleVideosW, /* name */ @@ -3047,7 +3025,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SavedGames, CSIDL_Type_User, NULL, - Saved_GamesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ SavedGamesW, /* name */ @@ -3067,7 +3045,7 @@ static const CSIDL_DATA CSIDL_Data[] = &FOLDERID_SavedSearches, CSIDL_Type_User, NULL, - SearchesW, + NULL,
KF_CATEGORY_PERUSER, /* category */ SearchesW, /* name */ @@ -3385,6 +3363,14 @@ static const CSIDL_DATA CSIDL_Data[] = } };
+static int csidl_from_id( const KNOWNFOLDERID *id ) +{ + int i; + for (i = 0; i < ARRAY_SIZE(CSIDL_Data); i++) + if (IsEqualGUID( CSIDL_Data[i].id, id )) return i; + return -1; +} + static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest);
/* Gets the value named value from the registry key @@ -3467,11 +3453,22 @@ static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, return hr; }
+static void append_relative_path(BYTE folder, WCHAR *pszPath) +{ + if (CSIDL_Data[folder].pszRelativePath) + { + PathAddBackslashW(pszPath); + strcatW(pszPath, CSIDL_Data[folder].pszRelativePath); + } + else if (CSIDL_Data[folder].szDefaultPath) + { + PathAddBackslashW(pszPath); + strcatW(pszPath, CSIDL_Data[folder].szDefaultPath); + } +} + /* Gets a 'semi-expanded' default value of the CSIDL with index folder into * pszPath, based on the entries in CSIDL_Data. By semi-expanded, I mean: - * - The entry's szDefaultPath may be either a string value or an integer - * resource identifier. In the latter case, the string value of the resource - * is written. * - Depending on the entry's type, the path may begin with an (unexpanded) * environment variable name. The caller is responsible for expanding * environment strings if so desired. @@ -3484,8 +3481,6 @@ static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix, static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath) { HRESULT hr; - WCHAR resourcePath[MAX_PATH]; - LPCWSTR pDefaultPath = NULL;
TRACE("0x%02x,%p\n", folder, pszPath);
@@ -3514,29 +3509,9 @@ static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath) } }
- if (CSIDL_Data[folder].szDefaultPath && - IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath)) - { - if (LoadStringW(shell32_hInstance, - LOWORD(CSIDL_Data[folder].szDefaultPath), resourcePath, MAX_PATH)) - { - hr = S_OK; - pDefaultPath = resourcePath; - } - else - { - FIXME("(%d,%s), LoadString failed, missing translation?\n", folder, - debugstr_w(pszPath)); - hr = E_FAIL; - } - } - else - { - hr = S_OK; - pDefaultPath = CSIDL_Data[folder].szDefaultPath; - } - if (SUCCEEDED(hr)) + if (IsEqualGUID(CSIDL_Data[folder].fidParent, &GUID_NULL)) { + /* hit the root, sub in env var */ switch (CSIDL_Data[folder].type) { case CSIDL_Type_User: @@ -3554,12 +3529,15 @@ static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath) default: ; /* no corresponding env. var, do nothing */ } - if (pDefaultPath) - { - PathAddBackslashW(pszPath); - strcatW(pszPath, pDefaultPath); - } + hr = S_OK; + }else{ + /* prepend with parent */ + hr = _SHGetDefaultValue(csidl_from_id(CSIDL_Data[folder].fidParent), pszPath); } + + if (SUCCEEDED(hr)) + append_relative_path(folder, pszPath); + TRACE("returning 0x%08x\n", hr); return hr; } @@ -4519,35 +4497,17 @@ HRESULT WINAPI SHGetFolderPathAndSubDirW( break; case CSIDL_Type_WindowsPath: GetWindowsDirectoryW(szTemp, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(szTemp); - strcatW(szTemp, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, szTemp); hr = S_OK; break; case CSIDL_Type_SystemPath: GetSystemDirectoryW(szTemp, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(szTemp); - strcatW(szTemp, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, szTemp); hr = S_OK; break; case CSIDL_Type_SystemX86Path: if (!GetSystemWow64DirectoryW(szTemp, MAX_PATH)) GetSystemDirectoryW(szTemp, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(szTemp); - strcatW(szTemp, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, szTemp); hr = S_OK; break; case CSIDL_Type_CurrVer: @@ -4707,12 +4667,7 @@ static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken, else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath) { GetWindowsDirectoryW(path, MAX_PATH); - if (CSIDL_Data[folders[i]].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folders[i]].szDefaultPath)) - { - PathAddBackslashW(path); - strcatW(path, CSIDL_Data[folders[i]].szDefaultPath); - } + append_relative_path(folders[i], path); } else hr = E_FAIL; @@ -5118,14 +5073,6 @@ HRESULT WINAPI SHGetSpecialFolderLocation( return hr; }
-static int csidl_from_id( const KNOWNFOLDERID *id ) -{ - int i; - for (i = 0; i < ARRAY_SIZE(CSIDL_Data); i++) - if (IsEqualGUID( CSIDL_Data[i].id, id )) return i; - return -1; -} - /************************************************************************* * SHGetKnownFolderPath [SHELL32.@] */ @@ -5165,35 +5112,17 @@ HRESULT WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID rfid, DWORD flags, HANDLE t break; case CSIDL_Type_WindowsPath: GetWindowsDirectoryW(tempW, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(tempW); - strcatW(tempW, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, tempW); hr = S_OK; break; case CSIDL_Type_SystemPath: GetSystemDirectoryW(tempW, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(tempW); - strcatW(tempW, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, tempW); hr = S_OK; break; case CSIDL_Type_SystemX86Path: if (!GetSystemWow64DirectoryW(tempW, MAX_PATH)) GetSystemDirectoryW(tempW, MAX_PATH); - if (CSIDL_Data[folder].szDefaultPath && - !IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath) && - *CSIDL_Data[folder].szDefaultPath) - { - PathAddBackslashW(tempW); - strcatW(tempW, CSIDL_Data[folder].szDefaultPath); - } + append_relative_path(folder, tempW); hr = S_OK; break; case CSIDL_Type_CurrVer:
On Thu, 27 May 2021, Andrew Eikum wrote:
Signed-off-by: Andrew Eikum aeikum@codeweavers.com
The actual path changes were in the previous patch. This one just de-duplicates some static data.
Strangely enough this patch introduces two new test failures in Wine:
userenv.c:185: Test failed: Expected 1, got 0 for ALLUSERSPROFILE (0) userenv.c:185: Test failed: Expected 1, got 0 for ALLUSERSPROFILE (1)
https://test.winehq.org/data/patterns.html#userenv:userenv
Maybe there was a copy/paste issue or something like that?
On Fri, May 28, 2021 at 08:09:54PM +0200, Francois Gouget wrote:
On Thu, 27 May 2021, Andrew Eikum wrote:
Signed-off-by: Andrew Eikum aeikum@codeweavers.com
The actual path changes were in the previous patch. This one just de-duplicates some static data.
Strangely enough this patch introduces two new test failures in Wine:
userenv.c:185: Test failed: Expected 1, got 0 for ALLUSERSPROFILE (0) userenv.c:185: Test failed: Expected 1, got 0 for ALLUSERSPROFILE (1)
https://test.winehq.org/data/patterns.html#userenv:userenv
Maybe there was a copy/paste issue or something like that?
Thanks. Looks like a real failure, should be fixed by this new patch:
https://source.winehq.org/patches/data/206997
Andrew