Vitaliy Margolen <wine-patch@kievinfo.com>

- IShellFolder::CompareIDs - return only -1/0/1 in lower 16 bit.

svn path=/trunk/; revision=10931
This commit is contained in:
Gé van Geldorp 2004-09-20 14:45:07 +00:00
parent 8985a9b088
commit 88a015f877

View file

@ -418,7 +418,7 @@ HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST p
type2; type2;
char szTemp1[MAX_PATH]; char szTemp1[MAX_PATH];
char szTemp2[MAX_PATH]; char szTemp2[MAX_PATH];
int nReturn = 0; HRESULT nReturn;
LPITEMIDLIST firstpidl, LPITEMIDLIST firstpidl,
nextpidl1, nextpidl1,
nextpidl2; nextpidl2;
@ -429,24 +429,28 @@ HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST p
BOOL isEmpty2 = _ILIsDesktop (pidl2); BOOL isEmpty2 = _ILIsDesktop (pidl2);
if (isEmpty1 && isEmpty2) if (isEmpty1 && isEmpty2)
return 0; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 );
if (isEmpty1) if (isEmpty1)
return -1; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
if (isEmpty2) if (isEmpty2)
return 1; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
/* test for different types. Sort order is the PT_* constant */ /* test for different types. Sort order is the PT_* constant */
type1 = _ILGetDataPointer (pidl1)->type; type1 = _ILGetDataPointer (pidl1)->type;
type2 = _ILGetDataPointer (pidl2)->type; type2 = _ILGetDataPointer (pidl2)->type;
if (type1 != type2) if (type1 < type2)
return (type1 - type2); return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
else if (type1 > type2)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
/* test for name of pidl */ /* test for name of pidl */
_ILSimpleGetText (pidl1, szTemp1, MAX_PATH); _ILSimpleGetText (pidl1, szTemp1, MAX_PATH);
_ILSimpleGetText (pidl2, szTemp2, MAX_PATH); _ILSimpleGetText (pidl2, szTemp2, MAX_PATH);
nReturn = strcasecmp (szTemp1, szTemp2); nReturn = strcasecmp (szTemp1, szTemp2);
if (nReturn != 0) if (nReturn < 0)
return nReturn; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
else if (nReturn > 0)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
/* test of complex pidls */ /* test of complex pidls */
firstpidl = ILCloneFirst (pidl1); firstpidl = ILCloneFirst (pidl1);
@ -459,11 +463,11 @@ HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST p
isEmpty2 = _ILIsDesktop (nextpidl2); isEmpty2 = _ILIsDesktop (nextpidl2);
if (isEmpty1 && isEmpty2) { if (isEmpty1 && isEmpty2) {
nReturn = 0; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 );
} else if (isEmpty1) { } else if (isEmpty1) {
nReturn = -1; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
} else if (isEmpty2) { } else if (isEmpty2) {
nReturn = 1; return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
/* optimizing end */ /* optimizing end */
} else if (SUCCEEDED (IShellFolder_BindToObject (iface, firstpidl, NULL, &IID_IShellFolder, (LPVOID *) & psf))) { } else if (SUCCEEDED (IShellFolder_BindToObject (iface, firstpidl, NULL, &IID_IShellFolder, (LPVOID *) & psf))) {
nReturn = IShellFolder_CompareIDs (psf, lParam, nextpidl1, nextpidl2); nReturn = IShellFolder_CompareIDs (psf, lParam, nextpidl1, nextpidl2);