New aPidl handling functions.

This commit is contained in:
Juergen Schmied 2000-02-20 18:36:23 +00:00 committed by Alexandre Julliard
parent ec74593be2
commit 02b0be7cff
2 changed files with 63 additions and 3 deletions

View file

@ -732,7 +732,7 @@ LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
/*************************************************************************
* SHSimpleIDListFromPath [SHELL32.162]
*/
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPSTR lpszPath)
LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPCSTR lpszPath)
{
LPITEMIDLIST pidl=NULL;
HANDLE hFile;
@ -758,7 +758,7 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathA (LPSTR lpszPath)
}
return pidl;
}
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPWSTR lpszPath)
LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPCWSTR lpszPath)
{
char lpszTemp[MAX_PATH];
TRACE("path=%s\n",debugstr_w(lpszPath));
@ -768,7 +768,7 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathW (LPWSTR lpszPath)
return SHSimpleIDListFromPathA (lpszTemp);
}
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPVOID lpszPath)
LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW (LPCVOID lpszPath)
{
if ( VERSION_OsIsUnicode())
return SHSimpleIDListFromPathW (lpszPath);
@ -1724,3 +1724,56 @@ DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
return wAttrib;
}
/*************************************************************************
* ILFreeaPidl
*
* free a aPidl struct
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
{
int i;
if(apidl)
{
for(i = 0; i < cidl; i++) SHFree(apidl[i]);
SHFree(apidl);
}
}
/*************************************************************************
* ILCopyaPidl
*
* copys a aPidl struct
*/
LPITEMIDLIST * _ILCopyaPidl(LPITEMIDLIST * apidlsrc, UINT cidl)
{
int i;
LPITEMIDLIST * apidldest = (LPITEMIDLIST*)SHAlloc(cidl * sizeof(LPITEMIDLIST));
if(!apidlsrc) return NULL;
for(i = 0; i < cidl; i++)
apidldest[i] = ILClone(apidlsrc[i]);
return apidldest;
}
/*************************************************************************
* _ILCopyCidaToaPidl
*
* creates aPidl from CIDA
*/
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPCIDA cida)
{
int i;
LPITEMIDLIST * dst = (LPITEMIDLIST*)SHAlloc(cida->cidl * sizeof(LPITEMIDLIST));
if(!dst) return NULL;
if (pidl)
*pidl = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[0]]));
for(i = 0; i < cida->cidl; i++)
dst[i] = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[i + 1]]));
return dst;
}

View file

@ -168,4 +168,11 @@ REFIID _ILGetGUIDPointer (LPCITEMIDLIST pidl);
void pdump (LPCITEMIDLIST pidl);
BOOL pcheck (LPCITEMIDLIST pidl);
/*
* aPidl helper
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl);
LPITEMIDLIST * _ILCopyaPidl(LPITEMIDLIST * apidlsrc, UINT cidl);
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPCIDA cida);
#endif