Sync to Wine-20050310:
Michael Jung <mjung(a)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(a)rogers.com>
- Add support for .exe's with exported functions.
Francois Gouget <fgouget(a)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(a)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(a)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(a)yahoo.com>
- Documentation spelling fixes.
Hans Leidekker <hans(a)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(a)bol.com.br>
- Update the resources for Portuguese.
Filip Navara <xnavara(a)volny.cz>
- Don't crash if ShellFolder doesn't implement the IID_ISFHelper
  interface.
Dmitry Timoshkov <dmitry(a)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(a)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(a)jet.franken.de>
- Output some more informations.
- Mark one global variable static.
Huw Davies <huw(a)codeweavers.com>
- SetPath("") should return S_OK.
  SetPath("nonexistent_path") should return S_FALSE.
- Don't prepend '\\' to the subkey name.
Joris Huizer <jorishuizer(a)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(a)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,(L
PVOID *)&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]