Cleanup, create unicode versions of _ILCreateFromPath,

_ILCreateGuidFromStr, and _ILCreateFromFindData.
oldstable
Mike McCormack 2005-02-22 14:50:35 +00:00 committed by Alexandre Julliard
parent 19b78a0e21
commit 3d9ba61478
1 changed files with 84 additions and 45 deletions

View File

@ -387,22 +387,14 @@ HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
*/
HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl, DWORD * attributes)
{
LPSHELLFOLDER sf;
WCHAR lpszDisplayName[MAX_PATH];
DWORD pchEaten;
HRESULT ret = E_FAIL;
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 (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)
@ -510,13 +502,13 @@ BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
* Explorer reads from registry directly (StreamMRU),
* so we can only check here
*/
if ((!pcheck (pidl1)) || (!pcheck (pidl2)))
if (!pcheck(pidl1) || !pcheck (pidl2))
return FALSE;
pdump (pidl1);
pdump (pidl2);
if ( (!pidl1) || (!pidl2) )
if (!pidl1 || !pidl2)
return FALSE;
while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
@ -524,7 +516,7 @@ BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
_ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
_ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
if (strcasecmp ( szData1, szData2 )!=0 )
if (strcasecmp( szData1, szData2 ))
return FALSE;
pidltemp1 = ILGetNext(pidltemp1);
@ -574,7 +566,7 @@ BOOL WINAPI ILIsParent(LPCITEMIDLIST pidlParent, LPCITEMIDLIST pidlChild, BOOL b
_ILSimpleGetText(pParent, szData1, MAX_PATH);
_ILSimpleGetText(pChild, szData2, MAX_PATH);
if (strcasecmp ( szData1, szData2 )!=0 )
if (strcasecmp( szData1, szData2 ))
return FALSE;
pParent = ILGetNext(pParent);
@ -1631,6 +1623,37 @@ LPITEMIDLIST _ILCreateGuidFromStrA(LPCSTR szGUID)
return _ILCreateGuid(PT_GUID, &iid);
}
LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
{
IID iid;
if (!SUCCEEDED(SHCLSIDFromStringW(szGUID, &iid)))
{
ERR("%s is not a GUID\n", debugstr_w(szGUID));
return NULL;
}
return _ILCreateGuid(PT_GUID, &iid);
}
LPITEMIDLIST _ILCreateFromFindDataW( WIN32_FIND_DATAW *wfd )
{
/* FIXME: should make unicode PIDLs */
WIN32_FIND_DATAA fda;
memset( &fda, 0, sizeof fda );
fda.dwFileAttributes = wfd->dwFileAttributes;
fda.ftCreationTime = wfd->ftCreationTime;
fda.ftLastAccessTime = wfd->ftLastAccessTime;
fda.ftLastWriteTime = wfd->ftLastWriteTime;
fda.nFileSizeHigh = wfd->nFileSizeHigh;
fda.nFileSizeLow = wfd->nFileSizeLow;
fda.dwReserved0 = wfd->dwReserved0;
fda.dwReserved1 = wfd->dwReserved1;
WideCharToMultiByte( CP_ACP, 0, wfd->cFileName, -1,
fda.cFileName, MAX_PATH, NULL, NULL );
return _ILCreateFromFindDataA( &fda );
}
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA * stffile )
{
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
@ -1703,25 +1726,41 @@ HRESULT _ILCreateFromPathA(LPCSTR szPath, LPITEMIDLIST* ppidl)
return *ppidl ? S_OK : E_OUTOFMEMORY;
}
HRESULT _ILCreateFromPathW(LPCWSTR szPath, LPITEMIDLIST* ppidl)
{
HANDLE hFile;
WIN32_FIND_DATAW stffile;
if (!ppidl)
return E_INVALIDARG;
hFile = FindFirstFileW(szPath, &stffile);
if (hFile == INVALID_HANDLE_VALUE)
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
FindClose(hFile);
*ppidl = _ILCreateFromFindDataW(&stffile);
return *ppidl ? S_OK : E_OUTOFMEMORY;
}
LPITEMIDLIST _ILCreateDrive(LPCWSTR lpszNew)
{
WCHAR sTemp[4];
LPITEMIDLIST pidlOut;
sTemp[0]=toupperW(lpszNew[0]);
sTemp[1]=':';
sTemp[2]='\\';
sTemp[3]=0x00;
TRACE("(%s)\n",debugstr_w(sTemp));
TRACE("(%s)\n",debugstr_w(lpszNew));
if ((pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct))))
pidlOut = _ILAlloc(PT_DRIVE, sizeof(DriveStruct));
if (pidlOut)
{
LPSTR pszDest;
if ((pszDest = _ILGetTextPointer(pidlOut)))
pszDest = _ILGetTextPointer(pidlOut);
if (pszDest)
{
WideCharToMultiByte(CP_ACP, 0, sTemp, sizeof(sTemp)/sizeof(WCHAR),
pszDest, sizeof(sTemp)/sizeof(WCHAR), NULL, NULL);
strcpy(pszDest, "x:\\");
pszDest[0]=toupperW(lpszNew[0]);
TRACE("-- create Drive: %s\n", debugstr_a(pszDest));
}
}