Move control panel applet enumeration to cpanelfolder.c.
diff --git a/dlls/shell32/cpanel.h b/dlls/shell32/cpanel.h
index 1d37d98..aa6b499 100644
--- a/dlls/shell32/cpanel.h
+++ b/dlls/shell32/cpanel.h
@@ -20,6 +20,8 @@
#ifndef __WINE_SHELL_CPANEL_H
#define __WINE_SHELL_CPANEL_H
+#include "cpl.h"
+
typedef struct CPlApplet {
struct CPlApplet* next; /* linked list */
HWND hWnd;
diff --git a/dlls/shell32/cpanelfolder.c b/dlls/shell32/cpanelfolder.c
index e4531b5..99a3674 100644
--- a/dlls/shell32/cpanelfolder.c
+++ b/dlls/shell32/cpanelfolder.c
@@ -38,6 +38,8 @@
#include "ole2.h"
#include "shlguid.h"
+#include "cpanel.h"
+#include "enumidlist.h"
#include "pidl.h"
#include "undocshell.h"
#include "shell32_main.h"
@@ -227,6 +229,219 @@
return hr;
}
+static LPITEMIDLIST _ILCreateCPanelApplet(LPCSTR name, LPCSTR displayName,
+ LPCSTR comment, int iconIdx)
+{
+ PIDLCPanelStruct *p;
+ LPITEMIDLIST pidl;
+ PIDLDATA tmp;
+ int size0 = (char*)&tmp.u.cpanel.szName-(char*)&tmp.u.cpanel;
+ int size = size0;
+ int l;
+
+ tmp.type = 0;
+ tmp.u.cpanel.dummy = 0;
+ tmp.u.cpanel.iconIdx = iconIdx;
+
+ l = strlen(name);
+ size += l+1;
+
+ tmp.u.cpanel.offsDispName = l+1;
+ l = strlen(displayName);
+ size += l+1;
+
+ tmp.u.cpanel.offsComment = tmp.u.cpanel.offsDispName+1+l;
+ l = strlen(comment);
+ size += l+1;
+
+ pidl = SHAlloc(size+4);
+ if (!pidl)
+ return NULL;
+
+ pidl->mkid.cb = size+2;
+ memcpy(pidl->mkid.abID, &tmp, 2+size0);
+
+ p = &((PIDLDATA*)pidl->mkid.abID)->u.cpanel;
+ strcpy(p->szName, name);
+ strcpy(p->szName+tmp.u.cpanel.offsDispName, displayName);
+ strcpy(p->szName+tmp.u.cpanel.offsComment, comment);
+
+ *(WORD*)((char*)pidl+(size+2)) = 0;
+
+ pcheck(pidl);
+
+ return pidl;
+}
+
+/**************************************************************************
+ * _ILGetCPanelPointer()
+ * gets a pointer to the control panel struct stored in the pidl
+ */
+static PIDLCPanelStruct* _ILGetCPanelPointer(LPCITEMIDLIST pidl)
+{
+ LPPIDLDATA pdata = _ILGetDataPointer(pidl);
+
+ if (pdata && pdata->type==0)
+ return (PIDLCPanelStruct*)&(pdata->u.cpanel);
+
+ return NULL;
+}
+
+ /**************************************************************************
+ * ISF_ControlPanel_fnEnumObjects
+ */
+static BOOL SHELL_RegisterCPanelApp(IEnumIDList* list, LPCSTR path)
+{
+ LPITEMIDLIST pidl;
+ CPlApplet* applet;
+ CPanel panel;
+ CPLINFO info;
+ unsigned i;
+ int iconIdx;
+
+ char displayName[MAX_PATH];
+ char comment[MAX_PATH];
+
+ WCHAR wpath[MAX_PATH];
+
+ MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, MAX_PATH);
+
+ panel.first = NULL;
+ applet = Control_LoadApplet(0, wpath, &panel);
+
+ if (applet)
+ {
+ for(i=0; i<applet->count; ++i)
+ {
+ WideCharToMultiByte(CP_ACP, 0, applet->info[i].szName, -1, displayName, MAX_PATH, 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, applet->info[i].szInfo, -1, comment, MAX_PATH, 0, 0);
+
+ applet->proc(0, CPL_INQUIRE, i, (LPARAM)&info);
+
+ if (info.idIcon > 0)
+ iconIdx = -info.idIcon; /* negative icon index instead of icon number */
+ else
+ iconIdx = 0;
+
+ pidl = _ILCreateCPanelApplet(path, displayName, comment, iconIdx);
+
+ if (pidl)
+ AddToEnumList(list, pidl);
+ }
+ Control_UnloadApplet(applet);
+ }
+ return TRUE;
+}
+
+static int SHELL_RegisterRegistryCPanelApps(IEnumIDList* list, HKEY hkey_root, LPCSTR szRepPath)
+{
+ char name[MAX_PATH];
+ char value[MAX_PATH];
+ HKEY hkey;
+
+ int cnt = 0;
+
+ if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
+ {
+ int idx = 0;
+
+ for(;; ++idx)
+ {
+ DWORD nameLen = MAX_PATH;
+ DWORD valueLen = MAX_PATH;
+
+ if (RegEnumValueA(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)&value, &valueLen) != ERROR_SUCCESS)
+ break;
+
+ if (SHELL_RegisterCPanelApp(list, value))
+ ++cnt;
+ }
+ RegCloseKey(hkey);
+ }
+
+ return cnt;
+}
+
+static int SHELL_RegisterCPanelFolders(IEnumIDList* list, HKEY hkey_root, LPCSTR szRepPath)
+{
+ char name[MAX_PATH];
+ HKEY hkey;
+
+ int cnt = 0;
+
+ if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
+ {
+ int idx = 0;
+ for(;; ++idx)
+ {
+ if (RegEnumKeyA(hkey, idx, name, MAX_PATH) != ERROR_SUCCESS)
+ break;
+
+ if (*name == '{')
+ {
+ LPITEMIDLIST pidl = _ILCreateGuidFromStrA(name);
+
+ if (pidl && AddToEnumList(list, pidl))
+ ++cnt;
+ }
+ }
+
+ RegCloseKey(hkey);
+ }
+
+ return cnt;
+}
+
+/**************************************************************************
+ * CreateCPanelEnumList()
+ */
+static BOOL CreateCPanelEnumList(
+ IEnumIDList * iface,
+ DWORD dwFlags)
+{
+ CHAR szPath[MAX_PATH];
+ WIN32_FIND_DATAA wfd;
+ HANDLE hFile;
+
+ TRACE("(%p)->(flags=0x%08lx) \n",iface,dwFlags);
+
+ /* enumerate control panel folders folders */
+ if (dwFlags & SHCONTF_FOLDERS)
+ SHELL_RegisterCPanelFolders(iface, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace");
+
+ /* enumerate the control panel applets */
+ if (dwFlags & SHCONTF_NONFOLDERS)
+ {
+ LPSTR p;
+
+ GetSystemDirectoryA(szPath, MAX_PATH);
+ p = PathAddBackslashA(szPath);
+ strcpy(p, "*.cpl");
+
+ TRACE("-- (%p)-> enumerate SHCONTF_NONFOLDERS of %s\n",iface,debugstr_a(szPath));
+ hFile = FindFirstFileA(szPath, &wfd);
+
+ if (hFile != INVALID_HANDLE_VALUE)
+ {
+ do
+ {
+ if (!(dwFlags & SHCONTF_INCLUDEHIDDEN) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
+ continue;
+
+ if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ strcpy(p, wfd.cFileName);
+ SHELL_RegisterCPanelApp((IEnumIDList*)iface, szPath);
+ }
+ } while(FindNextFileA(hFile, &wfd));
+ FindClose(hFile);
+ }
+
+ SHELL_RegisterRegistryCPanelApps((IEnumIDList*)iface, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
+ SHELL_RegisterRegistryCPanelApps((IEnumIDList*)iface, HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
+ }
+ return TRUE;
+}
+
/**************************************************************************
* ISF_ControlPanel_fnEnumObjects
*/
@@ -237,7 +452,9 @@
TRACE("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor(NULL, dwFlags, EIDL_CPANEL);
+ *ppEnumIDList = IEnumIDList_Constructor();
+ if (*ppEnumIDList)
+ CreateCPanelEnumList(*ppEnumIDList, dwFlags);
TRACE("--(%p)->(new ID List: %p)\n", This, *ppEnumIDList);
diff --git a/dlls/shell32/enumidlist.c b/dlls/shell32/enumidlist.c
index 23cec89..72416bfc 100644
--- a/dlls/shell32/enumidlist.c
+++ b/dlls/shell32/enumidlist.c
@@ -29,12 +29,10 @@
#include "shlwapi.h"
#include "winerror.h"
#include "objbase.h"
-#include <cpl.h>
#include "pidl.h"
#include "shlguid.h"
-#include "shell32_main.h"
-#include "cpanel.h"
+#include "enumidlist.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
@@ -60,7 +58,7 @@
/**************************************************************************
* AddToEnumList()
*/
-static BOOL AddToEnumList(
+BOOL AddToEnumList(
IEnumIDList * iface,
LPITEMIDLIST pidl)
{
@@ -69,6 +67,10 @@
LPENUMLIST pNew;
TRACE("(%p)->(pidl=%p)\n",This,pidl);
+
+ if (!iface || !pidl)
+ return FALSE;
+
pNew = (LPENUMLIST)SHAlloc(sizeof(ENUMLIST));
if(pNew)
{
@@ -170,161 +172,6 @@
return TRUE;
}
-BOOL SHELL_RegisterCPanelApp(IEnumIDList* list, LPCSTR path)
-{
- LPITEMIDLIST pidl;
- CPlApplet* applet;
- CPanel panel;
- CPLINFO info;
- unsigned i;
- int iconIdx;
-
- char displayName[MAX_PATH];
- char comment[MAX_PATH];
-
- WCHAR wpath[MAX_PATH];
-
- MultiByteToWideChar(CP_ACP, 0, path, -1, wpath, MAX_PATH);
-
- panel.first = NULL;
- applet = Control_LoadApplet(0, wpath, &panel);
-
- if (applet) {
- for(i=0; i<applet->count; ++i) {
- WideCharToMultiByte(CP_ACP, 0, applet->info[i].szName, -1, displayName, MAX_PATH, 0, 0);
- WideCharToMultiByte(CP_ACP, 0, applet->info[i].szInfo, -1, comment, MAX_PATH, 0, 0);
-
- applet->proc(0, CPL_INQUIRE, i, (LPARAM)&info);
-
- if (info.idIcon > 0)
- iconIdx = -info.idIcon; /* negative icon index instead of icon number */
- else
- iconIdx = 0;
-
- pidl = _ILCreateCPanel(path, displayName, comment, iconIdx);
-
- if (pidl)
- AddToEnumList(list, pidl);
- }
-
- Control_UnloadApplet(applet);
- }
-
- return TRUE;
-}
-
-int SHELL_RegisterRegistryCPanelApps(IEnumIDList* list, HKEY hkey_root, LPCSTR szRepPath)
-{
- char name[MAX_PATH];
- char value[MAX_PATH];
- HKEY hkey;
-
- int cnt = 0;
-
- if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
- {
- int idx = 0;
- for(;; ++idx)
- {
- DWORD nameLen = MAX_PATH;
- DWORD valueLen = MAX_PATH;
-
- if (RegEnumValueA(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)&value, &valueLen) != ERROR_SUCCESS)
- break;
-
- if (SHELL_RegisterCPanelApp(list, value))
- ++cnt;
- }
-
- RegCloseKey(hkey);
- }
-
- return cnt;
-}
-
-int SHELL_RegisterCPanelFolders(IEnumIDList* list, HKEY hkey_root, LPCSTR szRepPath)
-{
- char name[MAX_PATH];
- HKEY hkey;
-
- int cnt = 0;
-
- if (RegOpenKeyA(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS)
- {
- int idx = 0;
- for(;; ++idx)
- {
- if (RegEnumKeyA(hkey, idx, name, MAX_PATH) != ERROR_SUCCESS)
- break;
-
- if (*name == '{') {
- LPITEMIDLIST pidl = _ILCreateGuidFromStrA(name);
-
- if (pidl && AddToEnumList(list, pidl))
- ++cnt;
- }
- }
-
- RegCloseKey(hkey);
- }
-
- return cnt;
-}
-
-/**************************************************************************
- * CreateCPanelEnumList()
- */
-static BOOL CreateCPanelEnumList(
- IEnumIDList * iface,
- DWORD dwFlags)
-{
- ICOM_THIS(IEnumIDListImpl,iface);
-
- CHAR szPath[MAX_PATH];
- WIN32_FIND_DATAA wfd;
- HANDLE hFile;
-
- TRACE("(%p)->(flags=0x%08lx) \n",This,dwFlags);
-
- /* enumerate control panel folders folders */
- if (dwFlags & SHCONTF_FOLDERS)
- SHELL_RegisterCPanelFolders((IEnumIDList*)This, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace");
-
- /* enumerate the control panel applets */
- if (dwFlags & SHCONTF_NONFOLDERS)
- {
- LPSTR p;
-
- GetSystemDirectoryA(szPath, MAX_PATH);
- p = PathAddBackslashA(szPath);
- strcpy(p, "*.cpl");
-
- TRACE("-- (%p)-> enumerate SHCONTF_NONFOLDERS of %s\n",This,debugstr_a(szPath));
- hFile = FindFirstFileA(szPath, &wfd);
-
- if (hFile != INVALID_HANDLE_VALUE)
- {
- do
- {
- if (!(dwFlags & SHCONTF_INCLUDEHIDDEN) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))
- continue;
-
- if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
- strcpy(p, wfd.cFileName);
- SHELL_RegisterCPanelApp((IEnumIDList*)This, szPath);
- }
- } while(FindNextFileA(hFile, &wfd));
-
- FindClose(hFile);
- }
-
- SHELL_RegisterRegistryCPanelApps((IEnumIDList*)This, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
- SHELL_RegisterRegistryCPanelApps((IEnumIDList*)This, HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cpls");
- }
-
- return TRUE;
-}
-
/**************************************************************************
* CreateDesktopEnumList()
*/
@@ -470,7 +317,22 @@
*
*/
-IEnumIDList * IEnumIDList_Constructor(
+IEnumIDList * IEnumIDList_Constructor(void)
+{
+ IEnumIDListImpl *lpeidl = (IEnumIDListImpl*)HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY, sizeof(IEnumIDListImpl));
+
+ if (lpeidl)
+ {
+ lpeidl->ref = 1;
+ lpeidl->lpVtbl = &eidlvt;
+ }
+ TRACE("-- (%p)->()\n",lpeidl);
+
+ return (IEnumIDList*)lpeidl;
+}
+
+IEnumIDList * IEnumIDList_BadConstructor(
LPCSTR lpszPath,
DWORD dwFlags,
DWORD dwKind)
@@ -480,13 +342,10 @@
TRACE("()->(%s flags=0x%08lx kind=0x%08lx)\n",debugstr_a(lpszPath),dwFlags, dwKind);
- lpeidl = (IEnumIDListImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IEnumIDListImpl));
+ lpeidl = (IEnumIDListImpl *)IEnumIDList_Constructor();
if (lpeidl)
{
- lpeidl->ref = 1;
- lpeidl->lpVtbl = &eidlvt;
-
switch (dwKind)
{
case EIDL_DESK:
@@ -500,10 +359,6 @@
case EIDL_FILE:
ret = CreateFolderEnumList((IEnumIDList*)lpeidl, lpszPath, dwFlags);
break;
-
- case EIDL_CPANEL:
- ret = CreateCPanelEnumList((IEnumIDList*)lpeidl, dwFlags);
- break;
}
if(!ret) {
diff --git a/dlls/shell32/enumidlist.h b/dlls/shell32/enumidlist.h
new file mode 100644
index 0000000..63c445f
--- /dev/null
+++ b/dlls/shell32/enumidlist.h
@@ -0,0 +1,33 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef __ENUMIDLIST_H__
+#define __ENUMIDLIST_H__
+
+#include "shlobj.h"
+
+LPENUMIDLIST IEnumIDList_Constructor(void);
+BOOL AddToEnumList(IEnumIDList * iface, LPITEMIDLIST pidl);
+
+/* old interface that's going away soon: */
+/* kind of enumidlist */
+#define EIDL_DESK 0
+#define EIDL_MYCOMP 1
+#define EIDL_FILE 2
+
+IEnumIDList * IEnumIDList_BadConstructor(LPCSTR lpszPath, DWORD dwFlags,
+ DWORD dwKind);
+
+#endif /* ndef __ENUMIDLIST_H__ */
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index cd703cf..1ebdd76 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -1644,49 +1644,6 @@
return pidlOut;
}
-LPITEMIDLIST _ILCreateCPanel(LPCSTR name, LPCSTR displayName, LPCSTR comment, int iconIdx)
-{
- PIDLCPanelStruct *p;
- LPITEMIDLIST pidl;
- PIDLDATA tmp;
- int size0 = (char*)&tmp.u.cpanel.szName-(char*)&tmp.u.cpanel;
- int size = size0;
- int l;
-
- tmp.type = 0;
- tmp.u.cpanel.dummy = 0;
- tmp.u.cpanel.iconIdx = iconIdx;
-
- l = strlen(name);
- size += l+1;
-
- tmp.u.cpanel.offsDispName = l+1;
- l = strlen(displayName);
- size += l+1;
-
- tmp.u.cpanel.offsComment = tmp.u.cpanel.offsDispName+1+l;
- l = strlen(comment);
- size += l+1;
-
- pidl = SHAlloc(size+4);
- if (!pidl)
- return NULL;
-
- pidl->mkid.cb = size+2;
- memcpy(pidl->mkid.abID, &tmp, 2+size0);
-
- p = &((PIDLDATA*)pidl->mkid.abID)->u.cpanel;
- strcpy(p->szName, name);
- strcpy(p->szName+tmp.u.cpanel.offsDispName, displayName);
- strcpy(p->szName+tmp.u.cpanel.offsComment, comment);
-
- *(WORD*)((char*)pidl+(size+2)) = 0;
-
- pcheck(pidl);
-
- return pidl;
-}
-
/**************************************************************************
* _ILGetDrive()
*
@@ -1990,20 +1947,6 @@
return NULL;
}
-/**************************************************************************
- * _ILGetCPanelPointer()
- * gets a pointer to the control panel struct stored in the pidl
- */
-PIDLCPanelStruct* _ILGetCPanelPointer(LPCITEMIDLIST pidl)
-{
- LPPIDLDATA pdata = _ILGetDataPointer(pidl);
-
- if (pdata && pdata->type==0)
- return (PIDLCPanelStruct*)&(pdata->u.cpanel);
-
- return NULL;
-}
-
/*************************************************************************
* _ILGetFileDateTime
*
diff --git a/dlls/shell32/pidl.h b/dlls/shell32/pidl.h
index 7a2456e..bbd8aa3 100644
--- a/dlls/shell32/pidl.h
+++ b/dlls/shell32/pidl.h
@@ -209,7 +209,6 @@
LPITEMIDLIST _ILCreateNetwork (void);
LPITEMIDLIST _ILCreateBitBucket (void);
LPITEMIDLIST _ILCreateDrive (LPCSTR);
-LPITEMIDLIST _ILCreateCPanel (LPCSTR name, LPCSTR displayName, LPCSTR comment, int iconIdx);
/*
* helper functions (getting struct-pointer)
@@ -218,7 +217,6 @@
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
LPSTR _ILGetSTextPointer (LPCITEMIDLIST);
REFIID _ILGetGUIDPointer (LPCITEMIDLIST pidl);
-PIDLCPanelStruct* _ILGetCPanelPointer (LPCITEMIDLIST pidl);
/*
* debug helper
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 7a6ec7f..13a8d82 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -97,14 +97,6 @@
HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
-/* kind of enumidlist */
-#define EIDL_DESK 0
-#define EIDL_MYCOMP 1
-#define EIDL_FILE 2
-#define EIDL_CPANEL 3
-
-LPENUMIDLIST IEnumIDList_Constructor(LPCSTR,DWORD,DWORD);
-
LPEXTRACTICONA IExtractIconA_Constructor(LPCITEMIDLIST);
LPEXTRACTICONW IExtractIconW_Constructor(LPCITEMIDLIST);
HRESULT CreateStreamOnFile (LPCWSTR pszFilename, DWORD grfMode, IStream ** ppstm);
diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c
index ef05357..51ad618 100644
--- a/dlls/shell32/shfldr_desktop.c
+++ b/dlls/shell32/shfldr_desktop.c
@@ -40,6 +40,7 @@
#include "ole2.h"
#include "shlguid.h"
+#include "enumidlist.h"
#include "pidl.h"
#include "undocshell.h"
#include "shell32_main.h"
@@ -269,15 +270,11 @@
TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = NULL;
- *ppEnumIDList = IEnumIDList_Constructor (NULL, dwFlags, EIDL_DESK);
+ *ppEnumIDList = IEnumIDList_BadConstructor (NULL, dwFlags, EIDL_DESK);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
- if (!*ppEnumIDList)
- return E_OUTOFMEMORY;
-
- return S_OK;
+ return *ppEnumIDList ? S_OK : E_OUTOFMEMORY;
}
/**************************************************************************
diff --git a/dlls/shell32/shfldr_fs.c b/dlls/shell32/shfldr_fs.c
index 9b47484..90b60af 100644
--- a/dlls/shell32/shfldr_fs.c
+++ b/dlls/shell32/shfldr_fs.c
@@ -40,6 +40,7 @@
#include "ole2.h"
#include "shlguid.h"
+#include "enumidlist.h"
#include "pidl.h"
#include "undocshell.h"
#include "shell32_main.h"
@@ -391,7 +392,7 @@
TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor (This->sPathTarget, dwFlags, EIDL_FILE);
+ *ppEnumIDList = IEnumIDList_BadConstructor (This->sPathTarget, dwFlags, EIDL_FILE);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
diff --git a/dlls/shell32/shfldr_mycomp.c b/dlls/shell32/shfldr_mycomp.c
index 9923ab7..34963bd 100644
--- a/dlls/shell32/shfldr_mycomp.c
+++ b/dlls/shell32/shfldr_mycomp.c
@@ -38,7 +38,7 @@
#include "wingdi.h"
#include "pidl.h"
#include "shlguid.h"
-
+#include "enumidlist.h"
#include "undocshell.h"
#include "shell32_main.h"
#include "shresdef.h"
@@ -247,7 +247,7 @@
TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
- *ppEnumIDList = IEnumIDList_Constructor (NULL, dwFlags, EIDL_MYCOMP);
+ *ppEnumIDList = IEnumIDList_BadConstructor (NULL, dwFlags, EIDL_MYCOMP);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);