Ken Thomases : shell32: Avoid W->A conversion in RenderHDROP.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 15 08:19:21 CDT 2007
Module: wine
Branch: master
Commit: 8f5f3f5b8ea1f1e44dc85e7dc3e5edc2c4e624ba
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8f5f3f5b8ea1f1e44dc85e7dc3e5edc2c4e624ba
Author: Ken Thomases <ken at codeweavers.com>
Date: Wed Mar 14 13:17:29 2007 -0500
shell32: Avoid W->A conversion in RenderHDROP.
---
dlls/shell32/clipboard.c | 35 +++++++++++++++++------------------
1 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/dlls/shell32/clipboard.c b/dlls/shell32/clipboard.c
index 6972caf..7e8c920 100644
--- a/dlls/shell32/clipboard.c
+++ b/dlls/shell32/clipboard.c
@@ -60,9 +60,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
UINT i;
- int rootsize = 0,size = 0;
- char szRootPath[MAX_PATH];
- char szFileName[MAX_PATH];
+ int rootlen = 0,size = 0;
+ WCHAR wszRootPath[MAX_PATH];
+ WCHAR wszFileName[MAX_PATH];
HGLOBAL hGlobal;
DROPFILES *pDropFiles;
int offset;
@@ -72,39 +72,38 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
/* get the size needed */
size = sizeof(DROPFILES);
- SHGetPathFromIDListA(pidlRoot, szRootPath);
- PathAddBackslashA(szRootPath);
- rootsize = strlen(szRootPath);
+ SHGetPathFromIDListW(pidlRoot, wszRootPath);
+ PathAddBackslashW(wszRootPath);
+ rootlen = strlenW(wszRootPath);
for (i=0; i<cidl;i++)
{
- _ILSimpleGetText(apidl[i], szFileName, MAX_PATH);
- size += rootsize + strlen(szFileName) + 1;
+ _ILSimpleGetTextW(apidl[i], wszFileName, MAX_PATH);
+ size += (rootlen + strlenW(wszFileName) + 1) * sizeof(WCHAR);
}
- size++;
+ size += sizeof(WCHAR);
/* Fill the structure */
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
if(!hGlobal) return hGlobal;
pDropFiles = (DROPFILES *)GlobalLock(hGlobal);
- pDropFiles->pFiles = sizeof(DROPFILES);
- pDropFiles->fWide = FALSE;
+ offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR);
+ pDropFiles->pFiles = offset * sizeof(WCHAR);
+ pDropFiles->fWide = TRUE;
- offset = pDropFiles->pFiles;
- strcpy(szFileName, szRootPath);
+ strcpyW(wszFileName, wszRootPath);
for (i=0; i<cidl;i++)
{
- _ILSimpleGetText(apidl[i], szFileName + rootsize, MAX_PATH - rootsize);
- size = strlen(szFileName) + 1;
- strcpy(((char*)pDropFiles)+offset, szFileName);
- offset += size;
+ _ILSimpleGetTextW(apidl[i], wszFileName + rootlen, MAX_PATH - rootlen);
+ strcpyW(((WCHAR*)pDropFiles)+offset, wszFileName);
+ offset += strlenW(wszFileName) + 1;
}
- ((char*)pDropFiles)[offset] = 0;
+ ((WCHAR*)pDropFiles)[offset] = 0;
GlobalUnlock(hGlobal);
return hGlobal;
More information about the wine-cvs
mailing list