Sync to Wine-20050310:
Michael Jung <mjung@iss.tu-darmstadt.de>
- Beginning of a shell namespace extension to browse the unix
  filesystem.
- Fixed parsing of ITEMIDLIST in InitializeTreeView.
- Added some documentation.
- Fixed a crash occuring when the user double-clicks a leaf item.
Dimitrie O. Paun <dpaun@rogers.com>
- Add support for .exe's with exported functions.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
- Add the -noname flag to match the Platform SDK.
- Don't hardcode ordinals if which are not hardcoded on Windows.
Juan Lang <juan_lang@yahoo.com>
- Convert more API calls to Unicode.
- Convert tabs to space, wrap long lines, make indenting consistent.
- Convert a few calls to Unicode.
Mike McCormack <mike@codeweavers.com>
- handle IFileSystemBindData in ISF_Desktop_fnParseDisplayName
- more Unicode conversion
- handle IFileSystemBindData in IShellFolder::ParseDisplayName
- convert IShellFolder::ParseDisplayName to use Unicode
- Remove tabs and make formatting consistent.
- Reindent some code to improve readability.
- Define some extra SHFGI values.
- Remove tabs and reformat.
- Use lstrcmpiA in preference to strcasecmp.
- Make lstr* functions inline inside Wine.
- implement loading and saving of MSI advertised shortcut info
- make more test cases pass
- read and write the location block
- improve the binary compatibility of lnk files
- Cleanup, create unicode versions of _ILCreateFromPath,
  _ILCreateGuidFromStr, and _ILCreateFromFindData.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Documentation spelling fixes.
Hans Leidekker <hans@it.vu.nl>
- Revert wrong -noname markup for Drag*, DoEnvironmentSubst and
  SHGetNewLinkInfo{A,W}.
- Also mark stub exports -noname when they are exported by ordinal
  only on win98/2k.
- Implementation level stubs for SheChangeDirA, SheGetDirA,
  SHHelpShortcuts_RunDLL{A,W}.
- New spec file stubs for Control_RunDLLAsUserW,
  FixupOptionalComponents, OCInstall, SHChangeNotifySuspendResume,
  SHCreateProcessAsUserW, SHExtractIconsW,
  SHInvokePrinterCommand{A,W}, SHIsFileAvailableOffline,
  SHLoadNonloadedIconOverlayIdentifiers, SHPathPrepareForWrite{A,W},
  ShellExec_RunDLL{,A,W}, SHGetIconOverlayIndex{A,W}.
- Mark exports -noname when they are exported by ordinal only on
  win98/2k.
Marcelo Duarte <wine-devel@bol.com.br>
- Update the resources for Portuguese.
Filip Navara <xnavara@volny.cz>
- Don't crash if ShellFolder doesn't implement the IID_ISFHelper
  interface.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Fix prototypes of GetClassLongA/W, GetClassLongPtrA/W and
  SetClassLongA/W according to SDK definitions.
- Add prototypes for SetClassLongPtrA/W, protect some GWL_ and GCL_
  constants from using in Wine or in _WIN64 mode.
- Fix all places in Wine affected by the above changes.
- Convert winemenubuilder to unicode.
Alex Villacis Lasso <a_villacis@palosanto.com>
- Change SUBLANG_DEFAULT to SUBLANG_NEUTRAL for LANG_SPANISH in all
  resources, so that Spanish locales other than Spain also use Spanish
  resources.
Marcus Meissner <marcus@jet.franken.de>
- Output some more informations.
- Mark one global variable static.
Huw Davies <huw@codeweavers.com>
- SetPath("") should return S_OK.
  SetPath("nonexistent_path") should return S_FALSE.
- Don't prepend '\\' to the subkey name.
Joris Huizer <jorishuizer@planet.nl>
- renamed file_operation_delete and to shfileops_delete
- renamed file_operation_checkFlags to shfileops_check_flags
- added helper function shfileops_do_operation()
- added helper function shfileops_get_parent_attr()
- added helper function shfileops_get_parent_attr2()
- various cleanups in SHFileOperationW using these functions
Ge van Geldorp <gvg@reactos.com>
- Error numbers >= 32 are to be expected.
Modified: trunk/reactos/lib/shell32/Makefile.in
Modified: trunk/reactos/lib/shell32/brsfolder.c
Modified: trunk/reactos/lib/shell32/classes.c
Modified: trunk/reactos/lib/shell32/clipboard.c
Modified: trunk/reactos/lib/shell32/dialogs.c
Modified: trunk/reactos/lib/shell32/enumidlist.c
Modified: trunk/reactos/lib/shell32/enumidlist.h
Modified: trunk/reactos/lib/shell32/folders.c
Modified: trunk/reactos/lib/shell32/pidl.c
Modified: trunk/reactos/lib/shell32/pidl.h
Modified: trunk/reactos/lib/shell32/shell32.spec
Modified: trunk/reactos/lib/shell32/shell32_Es.rc
Modified: trunk/reactos/lib/shell32/shell32_Pt.rc
Modified: trunk/reactos/lib/shell32/shell32_main.c
Modified: trunk/reactos/lib/shell32/shell32_main.h
Modified: trunk/reactos/lib/shell32/shelllink.c
Modified: trunk/reactos/lib/shell32/shellpath.c
Modified: trunk/reactos/lib/shell32/shfldr.h
Modified: trunk/reactos/lib/shell32/shfldr_desktop.c
Modified: trunk/reactos/lib/shell32/shfldr_fs.c
Modified: trunk/reactos/lib/shell32/shfldr_mycomp.c
Added: trunk/reactos/lib/shell32/shfldr_unixfs.c
Modified: trunk/reactos/lib/shell32/shlexec.c
Modified: trunk/reactos/lib/shell32/shlfileop.c
Modified: trunk/reactos/lib/shell32/shlfolder.c
Modified: trunk/reactos/lib/shell32/shlfsbind.c
Modified: trunk/reactos/lib/shell32/shlview.c

Modified: trunk/reactos/lib/shell32/Makefile.in
--- trunk/reactos/lib/shell32/Makefile.in	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/Makefile.in	2005-03-16 07:51:01 UTC (rev 14118)
@@ -37,6 +37,7 @@
 	shfldr_desktop.c \
 	shfldr_fs.c \
 	shfldr_mycomp.c \
+	shfldr_unixfs.c \
 	shlexec.c \
 	shlfileop.c \
 	shlfolder.c \
@@ -77,7 +78,7 @@
 	$(LDPATH) $(RC16) $(RC16FLAGS) -fo$@ $(SRCDIR)/version16.rc
 
 shell.spec.c: shell.spec version16.res
-	$(WINEBUILD) $(DEFS) $(DLLFLAGS) -o $@ --main-module $(MODULE) --res version16.res --dll $(SRCDIR)/shell.spec
+	$(WINEBUILD) $(DEFS) $(DLLFLAGS) --dll -o $@ --main-module $(MODULE) --res version16.res --export $(SRCDIR)/shell.spec
 
 authors.c: $(TOPSRCDIR)/AUTHORS
 	(LC_ALL=C; export LC_ALL; echo 'const char * const SHELL_Authors[] = {' && \

Modified: trunk/reactos/lib/shell32/brsfolder.c
--- trunk/reactos/lib/shell32/brsfolder.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/brsfolder.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -55,68 +55,95 @@
     return SHCONTF_FOLDERS | (ulFlags & BIF_BROWSEINCLUDEFILES ? SHCONTF_NONFOLDERS : 0);
 }
 
+/******************************************************************************
+ * InitializeTreeView [Internal]
+ *
+ * Called from WM_INITDIALOG handler.
+ * 
+ * PARAMS
+ *  hwndParent [I] The BrowseForFolder dialog
+ *  root       [I] ITEMIDLIST of the root shell folder
+ */
 static void InitializeTreeView(HWND hwndParent, LPCITEMIDLIST root)
 {
-	HIMAGELIST	hImageList;
-	IShellFolder *	lpsf;
-	HRESULT	hr;
-	IEnumIDList * pEnumIL = NULL;
-	LPITEMIDLIST parentofroot;
-	parentofroot = ILClone(root);
-	ILRemoveLastID(parentofroot);
+    LPITEMIDLIST pidlParent, pidlChild;
+    HIMAGELIST hImageList;
+    HRESULT hr;
+    IShellFolder *lpsfParent, *lpsfRoot;
+    IEnumIDList * pEnumChildren = NULL;
 
-	hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
-	Shell_GetImageList(NULL, &hImageList);
+    TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+    
+    hwndTreeView = GetDlgItem (hwndParent, IDD_TREEVIEW);
+    if (!hwndTreeView) {
+        FIXME("Could not get handle to treeview control! Error: %08lx\n", GetLastError());
+        return;
+    }
+    Shell_GetImageList(NULL, &hImageList);
 
-	TRACE("dlg=%p tree=%p\n", hwndParent, hwndTreeView );
+    if (hImageList)
+        TreeView_SetImageList(hwndTreeView, hImageList, 0);
 
-	if (hImageList && hwndTreeView)
-	  TreeView_SetImageList(hwndTreeView, hImageList, 0);
+    /* We want to call InsertTreeViewItem down the code, in order to insert
+     * the root item of the treeview. Due to InsertTreeViewItem's signature, 
+     * we need the following to do this:
+     *
+     * + An ITEMIDLIST corresponding to _the parent_ of root. 
+     * + An ITEMIDLIST, which is a relative path from root's parent to root 
+     *   (containing a single SHITEMID).
+     * + An IShellFolder interface pointer of root's parent folder.
+     *
+     * If root is 'Desktop', then root's parent is also 'Desktop'.
+     */
 
-	if (_ILIsDesktop (root)) {
-	   hr = SHGetDesktopFolder(&lpsf);
-	} else {
-	   IShellFolder *	lpsfdesktop;
+    pidlParent = ILClone(root);
+    ILRemoveLastID(pidlParent);
+    pidlChild = ILClone(ILFindLastID(root));
+    
+    if (_ILIsDesktop(pidlParent)) {
+        hr = SHGetDesktopFolder(&lpsfParent);
+    } else {
+        IShellFolder *lpsfDesktop;
+        hr = SHGetDesktopFolder(&lpsfDesktop);
+        if (!SUCCEEDED(hr)) {
+            WARN("SHGetDesktopFolder failed! hr = %08lx\n", hr);
+            return;
+        }
+        hr = IShellFolder_BindToObject(lpsfDesktop, pidlParent, 0, &IID_IShellFolder, (LPVOID*)&lpsfParent);
+        IShellFolder_Release(lpsfDesktop);
+    }
+    
+    if (!SUCCEEDED(hr)) {
+        WARN("Could not bind to parent shell folder! hr = %08lx\n", hr);
+        return;
+    }
 
-	   hr = SHGetDesktopFolder(&lpsfdesktop);
-	   if (SUCCEEDED(hr)) {
-	      hr = IShellFolder_BindToObject(lpsfdesktop, parentofroot, 0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf);
-	      IShellFolder_Release(lpsfdesktop);
-	   }
-	}
-	if (SUCCEEDED(hr))
-	{
-	    IShellFolder * pSFRoot;
-	    if (_ILIsPidlSimple(root))
-	    {
-	        pSFRoot = lpsf;
-	        IShellFolder_AddRef(pSFRoot);
-	    }
-	    else
-	        hr = IShellFolder_BindToObject(lpsf,ILFindLastID(root),0,&IID_IShellFolder,(LPVOID *)&pSFRoot);
-	    if (SUCCEEDED(hr))
-	    {
-	        hr = IShellFolder_EnumObjects(
-	            pSFRoot,
-	            hwndParent,
-	            BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags),
-	            &pEnumIL);
-	        IShellFolder_Release(pSFRoot);
-	    }
-	}
+    if (pidlChild && pidlChild->mkid.cb) {
+        hr = IShellFolder_BindToObject(lpsfParent, pidlChild, 0, &IID_IShellFolder, (LPVOID*)&lpsfRoot);
+    } else {
+        lpsfRoot = lpsfParent;
+        hr = IShellFolder_AddRef(lpsfParent);
+    }
+    
+    if (!SUCCEEDED(hr)) {
+        WARN("Could not bind to root shell folder! hr = %08lx\n", hr);
+        IShellFolder_Release(lpsfParent);
+        return;
+    }
 
-	if (SUCCEEDED(hr) && hwndTreeView)
-	{
-	  TreeView_DeleteAllItems(hwndTreeView);
-	  TreeView_Expand(hwndTreeView,
-	                  InsertTreeViewItem(lpsf, _ILIsPidlSimple(root) ? root : ILFindLastID(root), parentofroot, pEnumIL,  TVI_ROOT),
-	                  TVE_EXPAND);
-	}
+    hr = IShellFolder_EnumObjects(lpsfRoot, hwndParent, BrowseFlagsToSHCONTF(lpBrowseInfo->ulFlags), &pEnumChildren);
+    if (!SUCCEEDED(hr)) {
+        WARN("Could not get child iterator! hr = %08lx\n", hr);
+        IShellFolder_Release(lpsfParent);
+        IShellFolder_Release(lpsfRoot);
+        return;
+    }
 
-	if (SUCCEEDED(hr))
-	  IShellFolder_Release(lpsf);
+    TreeView_DeleteAllItems(hwndTreeView);
+    TreeView_Expand(hwndTreeView, InsertTreeViewItem(lpsfParent, pidlChild, pidlParent, pEnumChildren,  TVI_ROOT), TVE_EXPAND);
 
-	TRACE("done\n");
+    IShellFolder_Release(lpsfRoot);
+    IShellFolder_Release(lpsfParent);
 }
 
 static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
@@ -149,12 +176,27 @@
 
 typedef struct tagID
 {
-   LPSHELLFOLDER lpsfParent;
-   LPITEMIDLIST  lpi;
-   LPITEMIDLIST  lpifq;
-   IEnumIDList*  pEnumIL;
+   LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */
+   LPITEMIDLIST  lpi;        /* PIDL relativ to parent */
+   LPITEMIDLIST  lpifq;      /* Fully qualified PIDL */
+   IEnumIDList*  pEnumIL;    /* Children iterator */ 
 } TV_ITEMDATA, *LPTV_ITEMDATA;
 
+/******************************************************************************
+ * GetName [Internal]
+ *
+ * Query a shell folder for the display name of one of it's children
+ *
+ * PARAMS
+ *  lpsf           [I] IShellFolder interface of the folder to be queried.
+ *  lpi            [I] ITEMIDLIST of the child, relative to parent
+ *  dwFlags        [I] as in IShellFolder::GetDisplayNameOf
+ *  lpFriendlyName [O] The desired display name in unicode
+ *
+ * RETURNS
+ *  Success: TRUE
+ *  Failure: FALSE
+ */
 static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName)
 {
 	BOOL   bSuccess=TRUE;
@@ -175,7 +217,22 @@
 	return bSuccess;
 }
 
-static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl, LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
+/******************************************************************************
+ * InsertTreeViewItem [Internal]
+ *
+ * PARAMS
+ *  lpsf       [I] IShellFolder interface of the item's parent shell folder 
+ *  pidl       [I] ITEMIDLIST of the child to insert, relativ to parent 
+ *  pidlParent [I] ITEMIDLIST of the parent shell folder
+ *  pEnumIL    [I] Iterator for the children of the item to be inserted
+ *  hParent    [I] The treeview-item that represents the parent shell folder
+ *
+ * RETURNS
+ *  Success: Handle to the created and inserted treeview-item
+ *  Failure: NULL
+ */
+static HTREEITEM InsertTreeViewItem(IShellFolder * lpsf, LPCITEMIDLIST pidl, 
+    LPCITEMIDLIST pidlParent, IEnumIDList* pEnumIL, HTREEITEM hParent)
 {
 	TVITEMW 	tvi;
 	TVINSERTSTRUCTW	tvins;
@@ -211,6 +268,18 @@
 	return (HTREEITEM)TreeView_InsertItemW(hwndTreeView, &tvins);
 }
 
+/******************************************************************************
+ * FillTreeView [Internal]
+ *
+ * For each child (given by lpe) of the parent shell folder, which is given by 
+ * lpsf and whose PIDL is pidl, insert a treeview-item right under hParent
+ *
+ * PARAMS
+ *  lpsf    [I] IShellFolder interface of the parent shell folder
+ *  pidl    [I] ITEMIDLIST of the parent shell folder
+ *  hParent [I] The treeview item that represents the parent shell folder
+ *  lpe     [I] An iterator for the children of the parent shell folder
+ */
 static void FillTreeView(IShellFolder * lpsf, LPITEMIDLIST  pidl, HTREEITEM hParent, IEnumIDList* lpe)
 {
 	HTREEITEM	hPrev = 0;
@@ -219,7 +288,11 @@
 	HRESULT		hr;
 	HWND		hwnd=GetParent(hwndTreeView);
 
-	TRACE("%p %p %x\n",lpsf, pidl, (INT)hParent);
+	TRACE("%p %p %x %p\n",lpsf, pidl, (INT)hParent, lpe);
+
+	/* No IEnumIDList -> No children */
+	if (!lpe) return;
+	
 	SetCapture(GetParent(hwndTreeView));
 	SetCursor(LoadCursorA(0, (LPSTR)IDC_WAIT));
 

Modified: trunk/reactos/lib/shell32/classes.c
--- trunk/reactos/lib/shell32/classes.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/classes.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -116,7 +116,7 @@
 
 BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len )
 {
-        static const WCHAR swShell[] = {'\\','s','h','e','l','l','\\',0};
+        static const WCHAR swShell[] = {'s','h','e','l','l','\\',0};
         static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0};
 	BOOL	ret = FALSE;
 

Modified: trunk/reactos/lib/shell32/clipboard.c
--- trunk/reactos/lib/shell32/clipboard.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/clipboard.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -26,7 +26,7 @@
  * - a right mousebutton-copy sets the following formats:
  *  classic:
  *	Shell IDList Array
- *	Prefered Drop Effect
+ *	Preferred Drop Effect
  *	Shell Object Offsets
  *	HDROP
  *	FileName

Modified: trunk/reactos/lib/shell32/dialogs.c
--- trunk/reactos/lib/shell32/dialogs.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/dialogs.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -127,9 +127,9 @@
         case WM_INITDIALOG :
             prfdp = (RUNFILEDLGPARAMS *)lParam ;
             SetWindowTextA (hwnd, prfdp->lpstrTitle) ;
-            SetClassLongA (hwnd, GCL_HICON, (LPARAM)prfdp->hIcon) ;
-            SendMessageA (GetDlgItem (hwnd, 12297), STM_SETICON,
-                          (WPARAM)LoadIconA (NULL, (LPSTR)IDI_WINLOGO), 0);
+            SetClassLongPtrW (hwnd, GCLP_HICON, (LPARAM)prfdp->hIcon) ;
+            SendMessageW (GetDlgItem (hwnd, 12297), STM_SETICON,
+                          (WPARAM)LoadIconW (NULL, (LPCWSTR)IDI_WINLOGO), 0);
             FillList (GetDlgItem (hwnd, 12298), NULL) ;
             SetFocus (GetDlgItem (hwnd, 12298)) ;
             return TRUE ;
@@ -283,7 +283,7 @@
 
         if (NULL != pszLatest)
             {
-            if (!strcasecmp (pszCmd, pszLatest))
+            if (!lstrcmpiA(pszCmd, pszLatest))
                 {
                 /*
                 sprintf (szDbgMsg, "Found existing (%d).\n", Nix) ;

Modified: trunk/reactos/lib/shell32/enumidlist.c
--- trunk/reactos/lib/shell32/enumidlist.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/enumidlist.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -25,6 +25,7 @@
 #define COBJMACROS
 
 #include "wine/debug.h"
+#include "wine/unicode.h"
 #include "windef.h"
 #include "winbase.h"
 #include "winreg.h"
@@ -103,24 +104,27 @@
  */
 BOOL CreateFolderEnumList(
 	IEnumIDList *list,
-	LPCSTR lpszPath,
+	LPCWSTR lpszPath,
 	DWORD dwFlags)
 {
     LPITEMIDLIST pidl=NULL;
-    WIN32_FIND_DATAA stffile;
+    WIN32_FIND_DATAW stffile;
     HANDLE hFile;
-    CHAR  szPath[MAX_PATH];
+    WCHAR  szPath[MAX_PATH];
     BOOL succeeded = TRUE;
+    const static WCHAR stars[] = { '*','.','*',0 };
+    const static WCHAR dot[] = { '.',0 };
+    const static WCHAR dotdot[] = { '.','.',0 };
 
-    TRACE("(%p)->(path=%s flags=0x%08lx) \n",list,debugstr_a(lpszPath),dwFlags);
+    TRACE("(%p)->(path=%s flags=0x%08lx) \n",list,debugstr_w(lpszPath),dwFlags);
 
     if(!lpszPath || !lpszPath[0]) return FALSE;
 
-    strcpy(szPath, lpszPath);
-    PathAddBackslashA(szPath);
-    strcat(szPath,"*.*");
+    strcpyW(szPath, lpszPath);
+    PathAddBackslashW(szPath);
+    strcatW(szPath,stars);
 
-    hFile = FindFirstFileA(szPath,&stffile);
+    hFile = FindFirstFileW(szPath,&stffile);
     if ( hFile != INVALID_HANDLE_VALUE )
     {
         BOOL findFinished = FALSE;
@@ -132,21 +136,21 @@
             {
                 if ( (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
                  dwFlags & SHCONTF_FOLDERS &&
-                 strcmp (stffile.cFileName, ".") && strcmp (stffile.cFileName, ".."))
+                 strcmpW(stffile.cFileName, dot) && strcmpW(stffile.cFileName, dotdot))
                 {
-                    pidl = _ILCreateFromFindDataA(&stffile);
+                    pidl = _ILCreateFromFindDataW(&stffile);
                     succeeded = succeeded && AddToEnumList(list, pidl);
                 }
                 else if (!(stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                  && dwFlags & SHCONTF_NONFOLDERS)
                 {
-                    pidl = _ILCreateFromFindDataA(&stffile);
+                    pidl = _ILCreateFromFindDataW(&stffile);
                     succeeded = succeeded && AddToEnumList(list, pidl);
                 }
             }
             if (succeeded)
             {
-                if (!FindNextFileA(hFile, &stffile))
+                if (!FindNextFileW(hFile, &stffile))
                 {
                     if (GetLastError() == ERROR_NO_MORE_FILES)
                         findFinished = TRUE;

Modified: trunk/reactos/lib/shell32/enumidlist.h
--- trunk/reactos/lib/shell32/enumidlist.h	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/enumidlist.h	2005-03-16 07:51:01 UTC (rev 14118)
@@ -25,6 +25,6 @@
 /* Enumerates the folders and/or files (depending on dwFlags) in lpszPath and
  * adds them to the already-created list.
  */
-BOOL CreateFolderEnumList(IEnumIDList *list, LPCSTR lpszPath, DWORD dwFlags);
+BOOL CreateFolderEnumList(IEnumIDList *list, LPCWSTR lpszPath, DWORD dwFlags);
 
 #endif /* ndef __ENUMIDLIST_H__ */

Modified: trunk/reactos/lib/shell32/folders.c
--- trunk/reactos/lib/shell32/folders.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/folders.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -328,7 +328,7 @@
 
 	      found = TRUE;
 	    }
-	    else if (!strcasecmp(sTemp, "lnkfile"))
+	    else if (!lstrcmpiA(sTemp, "lnkfile"))
 	    {
 	      /* extract icon from shell shortcut */
 	      IShellFolder* dsf;

Modified: trunk/reactos/lib/shell32/pidl.c
--- trunk/reactos/lib/shell32/pidl.c	2005-03-16 03:12:32 UTC (rev 14117)
+++ trunk/reactos/lib/shell32/pidl.c	2005-03-16 07:51:01 UTC (rev 14118)
@@ -1,7 +1,7 @@
 /*
- *	pidl Handling
+ *    pidl Handling
  *
- *	Copyright 1998	Juergen Schmied
+ *    Copyright 1998    Juergen Schmied
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -57,7 +57,7 @@
 extern BOOL WINAPI Free(LPVOID);
 
 /*************************************************************************
- * ILGetDisplayNameEx		[SHELL32.186]
+ * ILGetDisplayNameEx        [SHELL32.186]
  *
  * Retrieves the display name of an ItemIDList
  *
@@ -75,106 +75,108 @@
  */
 BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
 {
-	BOOL ret = FALSE;
-	WCHAR wPath[MAX_PATH];
+    BOOL ret = FALSE;
+    WCHAR wPath[MAX_PATH];
 
-	TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+    TRACE("%p %p %p %ld\n", psf, pidl, path, type);
 
-	if (!pidl || !path)
-	  return FALSE;
+    if (!pidl || !path)
+        return FALSE;
 
-	ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
-	WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL);
-	TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
+    ret = ILGetDisplayNameExW(psf, pidl, wPath, type);
+    WideCharToMultiByte(CP_ACP, 0, wPath, -1, path, MAX_PATH, NULL, NULL);
+    TRACE("%p %p %s\n", psf, pidl, debugstr_a(path));
 
-	return ret;
+    return ret;
 }
 
 BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
 {
-	LPSHELLFOLDER psfParent, lsf = psf;
-	HRESULT ret = NO_ERROR;
-	LPCITEMIDLIST pidllast;
-	STRRET strret;
-	DWORD flag;
+    LPSHELLFOLDER psfParent, lsf = psf;
+    HRESULT ret = NO_ERROR;
+    LPCITEMIDLIST pidllast;
+    STRRET strret;
+    DWORD flag;
 
-	TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+    TRACE("%p %p %p %ld\n", psf, pidl, path, type);
 
-	if (!pidl || !path)
-	  return FALSE;
+    if (!pidl || !path)
+        return FALSE;
 
-	if (!lsf)
-	{
-	  ret = SHGetDesktopFolder(&lsf);
-	  if (FAILED(ret))
-	    return FALSE;
-	}
+    if (!lsf)
+    {
+        ret = SHGetDesktopFolder(&lsf);
+        if (FAILED(ret))
+            return FALSE;
+    }
 
-	if (type >= 0 && type <= 2)
-	{
-	  switch (type)
-	  {
-	    case ILGDN_FORPARSING:
-	      flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
-	      break;
-	    case ILGDN_NORMAL:
-	      flag = SHGDN_NORMAL;
-	      break;
-	    case ILGDN_INFOLDER:
-	      flag = SHGDN_INFOLDER;
-	      break;
-	    default:
-	      FIXME("Unknown type parameter = %lx\n", type);
-	      flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
-	      break;
-	  }
-	  if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
-	  {
-	    ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
-	    if (SUCCEEDED(ret))
-	    {
-	      ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
-	    }
-	  }
-	  else
-	  {
-	    ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
-	    if (SUCCEEDED(ret))
-	    {
-	      ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
-	      if (SUCCEEDED(ret))
-	      {
-	        ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
-	      }
-	      IShellFolder_Release(psfParent);
-	    }
-	  }
-	}
+    if (type >= 0 && type <= 2)
+    {
+        switch (type)
+        {
+        case ILGDN_FORPARSING:
+            flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+            break;
+        case ILGDN_NORMAL:
+            flag = SHGDN_NORMAL;
+            break;
+        case ILGDN_INFOLDER:
+            flag = SHGDN_INFOLDER;
+            break;
+        default:
+            FIXME("Unknown type parameter = %lx\n", type);
+            flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
+            break;
+        }
+        if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
+        {
+            ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
+            if (SUCCEEDED(ret))
+            {
+                ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
+            }
+        }
+        else
+        {
+            ret = SHBindToParent(pidl, &IID_IShellFolder, (LPVOID*)&psfParent, &pidllast);
+            if (SUCCEEDED(ret))
+            {
+                ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
+                if (SUCCEEDED(ret))
+                {
+                    ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
+                }
+                IShellFolder_Release(psfParent);
+            }
+        }
+    }
 
-	TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
+    TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
 
-	if (!psf)
-	  IShellFolder_Release(lsf);
-	return SUCCEEDED(ret);
+    if (!psf)
+        IShellFolder_Release(lsf);
+    return SUCCEEDED(ret);
 }
 
 BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
 {
-	TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
-	if (SHELL_OsIsUnicode())
-	  return ILGetDisplayNameExW(psf, pidl, path, type);
-	return ILGetDisplayNameExA(psf, pidl, path, type);
+    TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
+
+    if (SHELL_OsIsUnicode())
+        return ILGetDisplayNameExW(psf, pidl, path, type);
+    return ILGetDisplayNameExA(psf, pidl, path, type);
 }
 
 /*************************************************************************
- * ILGetDisplayName			[SHELL32.15]
+ * ILGetDisplayName            [SHELL32.15]
  */
 BOOL WINAPI ILGetDisplayName(LPCITEMIDLIST pidl, LPVOID path)
 {
-	TRACE_(shell)("%p %p\n", pidl, path);
-	if (SHELL_OsIsUnicode())
-	  return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
-	return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
+    TRACE_(shell)("%p %p\n", pidl, path);
+
+    if (SHELL_OsIsUnicode())
+        return ILGetDisplayNameExW(NULL, pidl, path, ILGDN_FORPARSING);
+    return ILGetDisplayNameExA(NULL, pidl, path, ILGDN_FORPARSING);
 }
 
 /*************************************************************************
@@ -185,20 +187,21 @@
  */
 LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
 {
-	LPCITEMIDLIST   pidlLast = pidl;
+    LPCITEMIDLIST   pidlLast = pidl;
 
-	TRACE("(pidl=%p)\n",pidl);
+    TRACE("(pidl=%p)\n",pidl);
 
-	if (!pidl)
-	  return NULL;
+    if (!pidl)
+        return NULL;
 
-	while (pidl->mkid.cb)
-	{
-	  pidlLast = pidl;
-	  pidl = ILGetNext(pidl);
-	}
-	return (LPITEMIDLIST)pidlLast;
+    while (pidl->mkid.cb)
+    {
+        pidlLast = pidl;
+        pidl = ILGetNext(pidl);
+    }
+    return (LPITEMIDLIST)pidlLast;
 }
+
 /*************************************************************************
  * ILRemoveLastID [SHELL32.17]
  *
@@ -207,12 +210,12 @@
  */
 BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
 {
-	TRACE_(shell)("pidl=%p\n",pidl);
+    TRACE_(shell)("pidl=%p\n",pidl);
 
-	if (!pidl || !pidl->mkid.cb)
-	  return 0;
-	ILFindLastID(pidl)->mkid.cb = 0;
-	return 1;
+    if (!pidl || !pidl->mkid.cb)
+        return 0;
+    ILFindLastID(pidl)->mkid.cb = 0;
+    return 1;
 }
 
 /*************************************************************************
@@ -222,22 +225,24 @@
  *    duplicate an idlist
  */
 LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
-{ DWORD    len;
-  LPITEMIDLIST  newpidl;
+{
+    DWORD    len;
+    LPITEMIDLIST  newpidl;
 
-  if (!pidl)
-    return NULL;
+    if (!pidl)
+        return NULL;
 
-  len = ILGetSize(pidl);
-  newpidl = (LPITEMIDLIST)SHAlloc(len);
-  if (newpidl)
-    memcpy(newpidl,pidl,len);
+    len = ILGetSize(pidl);
+    newpidl = (LPITEMIDLIST)SHAlloc(len);
+    if (newpidl)
+        memcpy(newpidl,pidl,len);
 
-  TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
-  pdump(pidl);
+    TRACE("pidl=%p newpidl=%p\n",pidl, newpidl);
+    pdump(pidl);
 
-  return newpidl;
+    return newpidl;
 }
+
 /*************************************************************************
  * ILCloneFirst [SHELL32.19]
  *
@@ -245,27 +250,28 @@
  *  duplicates the first idlist of a complex pidl
  */
 LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
-{	DWORD len;
-	LPITEMIDLIST pidlNew = NULL;
+{
+    DWORD len;
+    LPITEMIDLIST pidlNew = NULL;
 
-	TRACE("pidl=%p \n",pidl);
-	pdump(pidl);
+    TRACE("pidl=%p \n",pidl);
+    pdump(pidl);
 
-	if (pidl)
-	{
-	  len = pidl->mkid.cb;
-	  pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
-	  if (pidlNew)
-	  {
-	    memcpy(pidlNew,pidl,len+2);		/* 2 -> mind a desktop pidl */
+    if (pidl)
+    {
+        len = pidl->mkid.cb;
+        pidlNew = (LPITEMIDLIST) SHAlloc (len+2);
+        if (pidlNew)
+        {
+            memcpy(pidlNew,pidl,len+2);        /* 2 -> mind a desktop pidl */
 
-	    if (len)
-	      ILGetNext(pidlNew)->mkid.cb = 0x00;
-	  }
-	}
-	TRACE("-- newpidl=%p\n",pidlNew);
+            if (len)
+                ILGetNext(pidlNew)->mkid.cb = 0x00;
+        }
+    }
+    TRACE("-- newpidl=%p\n",pidlNew);
 
-	return pidlNew;
+    return pidlNew;
 }
 
 /*************************************************************************
@@ -275,51 +281,58 @@
  *   the first two bytes are the len, the pidl is following then
  */
 HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl)
-{	WORD		wLen = 0;
-	DWORD		dwBytesRead;
-	HRESULT		ret = E_FAIL;
+{
+    WORD        wLen = 0;
+    DWORD       dwBytesRead;
+    HRESULT     ret = E_FAIL;
 
 
-	TRACE_(shell)("%p %p\n", pStream ,  ppPidl);
+    TRACE_(shell)("%p %p\n", pStream ,  ppPidl);
 
-	if (*ppPidl)
-	{ SHFree(*ppPidl);
-	  *ppPidl = NULL;
-	}
+    if (*ppPidl)
+    {
+        SHFree(*ppPidl);
+        *ppPidl = NULL;
+    }
 
-	IStream_AddRef (pStream);
+    IStream_AddRef (pStream);
 
-	if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2, &dwBytesRead)))
-	{
-	  TRACE("PIDL length is %d\n", wLen);
-	  if (wLen != 0) {
-	    *ppPidl = SHAlloc (wLen);
-	    if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead))) {
-		TRACE("Stream read OK\n");
-		ret = S_OK;
-	    } else {
-		WARN("reading pidl failed\n");
-		SHFree(*ppPidl);
-		*ppPidl = NULL;
-	    }
-	  } else {
-	    *ppPidl = NULL;
-	    ret = S_OK;
-	  }
-	}
+    if (SUCCEEDED(IStream_Read(pStream, (LPVOID)&wLen, 2, &dwBytesRead)))
+    {
+        TRACE("PIDL length is %d\n", wLen);
+        if (wLen != 0)
+        {
+            *ppPidl = SHAlloc (wLen);
+            if (SUCCEEDED(IStream_Read(pStream, *ppPidl , wLen, &dwBytesRead)))
+            {
+                TRACE("Stream read OK\n");
+                ret = S_OK;
+            }
+            else
+            {
+                WARN("reading pidl failed\n");
+                SHFree(*ppPidl);
+                *ppPidl = NULL;
+            }
+        }
+        else
+        {
+            *ppPidl = NULL;
+            ret = S_OK;
+        }
+    }
 
-	/* we are not yet fully compatible */
-	if (*ppPidl && !pcheck(*ppPidl))
-	{
-	  WARN("Check failed\n");
-	  SHFree(*ppPidl);
-	  *ppPidl = NULL;
-	}
+    /* we are not yet fully compatible */
+    if (*ppPidl && !pcheck(*ppPidl))
+    {
+        WARN("Check failed\n");
+        SHFree(*ppPidl);
+        *ppPidl = NULL;
+    }
 
-	
-	IStream_Release (pStream);
-	TRACE("done\n");
-	return ret;
+    IStream_Release (pStream);
+    TRACE("done\n");
+    return ret;
 }
 
 /*************************************************************************
@@ -330,30 +343,29 @@
  */
 HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
 {
-	LPCITEMIDLIST	pidl;
-	WORD		wLen = 0;
-	HRESULT		ret = E_FAIL;
+    LPCITEMIDLIST    pidl;
+    WORD        wLen = 0;
+    HRESULT        ret = E_FAIL;
 
-	TRACE_(shell)("%p %p\n", pStream, pPidl);
+    TRACE_(shell)("%p %p\n", pStream, pPidl);
 
-	IStream_AddRef (pStream);
+    IStream_AddRef (pStream);
 
-	pidl = pPidl;
-        while (pidl->mkid.cb)
-        {
-          wLen += sizeof(WORD) + pidl->mkid.cb;
-          pidl = ILGetNext(pidl);
-        }
+    pidl = pPidl;
+    while (pidl->mkid.cb)
+    {
+        wLen += sizeof(WORD) + pidl->mkid.cb;
+        pidl = ILGetNext(pidl);
+    }
 
-	if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
-	{
-	  if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
-	  { ret = S_OK;
-	  }
-	}
-	IStream_Release (pStream);
+    if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
+    {
+        if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL)))
+            ret = S_OK;
+    }
+    IStream_Release (pStream);
 
-	return ret;
+    return ret;
 }
 
 /*************************************************************************
@@ -375,45 +387,37 @@
  */
 HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl, DWORD * attributes)
 {
-	LPSHELLFOLDER sf;
-	WCHAR lpszDisplayName[MAX_PATH];
-	DWORD pchEaten;
-	HRESULT ret = E_FAIL;
+    WCHAR lpszDisplayName[MAX_PATH];
 
-	TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
+    TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
 
-	if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
-	  lpszDisplayName[MAX_PATH-1] = 0;
+    if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
+        lpszDisplayName[MAX_PATH-1] = 0;
 
-	if (SUCCEEDED (SHGetDesktopFolder(&sf)))
-	{
-	  ret = IShellFolder_ParseDisplayName(sf, 0, NULL, lpszDisplayName, &pchEaten, ppidl, attributes);
-	  IShellFolder_Release(sf);
-	}
-	return ret;
+    return SHILCreateFromPathW(lpszDisplayName, ppidl, attributes);
 }
 
 HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl, DWORD * attributes)
 {
-	LPSHELLFOLDER sf;
-	DWORD pchEaten;
-	HRESULT ret = E_FAIL;
+    LPSHELLFOLDER sf;
+    DWORD pchEaten;
+    HRESULT ret = E_FAIL;
 
-	TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
+    TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
 
-	if (SUCCEEDED (SHGetDesktopFolder(&sf)))
-	{
-	  ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
-	  IShellFolder_Release(sf);
-	}
-	return ret;
+    if (SUCCEEDED (SHGetDesktopFolder(&sf)))
+    {
+        ret = IShellFolder_ParseDisplayName(sf, 0, NULL, (LPWSTR)path, &pchEaten, ppidl, attributes);
+        IShellFolder_Release(sf);
+    }
+    return ret;
 }
 
 HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD * attributes)
 {
-	if ( SHELL_OsIsUnicode())
-	  return SHILCreateFromPathW (path, ppidl, attributes);
-	return SHILCreateFromPathA (path, ppidl, attributes);
+    if ( SHELL_OsIsUnicode())
+        return SHILCreateFromPathW (path, ppidl, attributes);
+    return SHILCreateFromPathA (path, ppidl, attributes);
 }
 
 /*************************************************************************
@@ -422,9 +426,9 @@
  * Create an ItemIDList to one of the special folders.
 
  * PARAMS
- *  hwndOwner	[in]
- *  nFolder		[in]	CSIDL_xxxxx
- *  fCreate		[in]	Create folder if it does not exist
+ *  hwndOwner    [in]
+ *  nFolder      [in]    CSIDL_xxxxx
+ *  fCreate      [in]    Create folder if it does not exist
  *
  * RETURNS
  *  Success: The newly created pidl
@@ -436,14 +440,15 @@
  *  shells IMalloc interface, aka ILFree.
  */
 LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, DWORD nFolder, BOOL fCreate)
-{	LPITEMIDLIST ppidl;
-	TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
+{
+    LPITEMIDLIST ppidl;
+    TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
 
-	if (fCreate)
-	  nFolder |= CSIDL_FLAG_CREATE;
+    if (fCreate)
+        nFolder |= CSIDL_FLAG_CREATE;
 
-	SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
-	return ppidl;
+    SHGetSpecialFolderLocation(hwndOwner, nFolder, &ppidl);
+    return ppidl;
 }
 
 /*************************************************************************
@@ -461,21 +466,22 @@
  *  exported by ordinal.
  */
[truncated at 1000 lines; 10070 more skipped]