mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 08:50:49 +00:00
oledlg: Use standard C functions for memory allocation in pastespl.c.
This commit is contained in:
parent
b59defb244
commit
d7ef00e66e
|
@ -121,22 +121,11 @@ static inline WCHAR *strdupAtoW(const char *str)
|
||||||
WCHAR *ret;
|
WCHAR *ret;
|
||||||
if(!str) return NULL;
|
if(!str) return NULL;
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
||||||
ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
ret = malloc(len * sizeof(WCHAR));
|
||||||
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline WCHAR *strdupW(const WCHAR *str)
|
|
||||||
{
|
|
||||||
DWORD len;
|
|
||||||
WCHAR *ret;
|
|
||||||
if(!str) return NULL;
|
|
||||||
len = lstrlenW(str) + 1;
|
|
||||||
ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
||||||
memcpy(ret, str, len * sizeof(WCHAR));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
|
static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
|
||||||
{
|
{
|
||||||
FORMATETC fmtetc;
|
FORMATETC fmtetc;
|
||||||
|
@ -152,9 +141,9 @@ static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
|
||||||
{
|
{
|
||||||
OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
|
OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
|
||||||
if(obj_desc->dwSrcOfCopy)
|
if(obj_desc->dwSrcOfCopy)
|
||||||
ps_struct->source_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
|
ps_struct->source_name = wcsdup((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
|
||||||
if(obj_desc->dwFullUserTypeName)
|
if(obj_desc->dwFullUserTypeName)
|
||||||
ps_struct->type_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
|
ps_struct->type_name = wcsdup((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
|
||||||
OleRegGetUserType(&obj_desc->clsid, USERCLASSTYPE_APPNAME, &ps_struct->app_name);
|
OleRegGetUserType(&obj_desc->clsid, USERCLASSTYPE_APPNAME, &ps_struct->app_name);
|
||||||
/* Get the icon here. If dwDrawAspect & DVASCPECT_ICON call GetData(CF_METAFILEPICT), otherwise
|
/* Get the icon here. If dwDrawAspect & DVASCPECT_ICON call GetData(CF_METAFILEPICT), otherwise
|
||||||
native calls OleGetIconFromClass(obj_desc->clsid) */
|
native calls OleGetIconFromClass(obj_desc->clsid) */
|
||||||
|
@ -171,9 +160,9 @@ static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
|
||||||
{
|
{
|
||||||
OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
|
OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
|
||||||
if(obj_desc->dwSrcOfCopy)
|
if(obj_desc->dwSrcOfCopy)
|
||||||
ps_struct->link_source_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
|
ps_struct->link_source_name = wcsdup((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
|
||||||
if(obj_desc->dwFullUserTypeName)
|
if(obj_desc->dwFullUserTypeName)
|
||||||
ps_struct->link_type_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
|
ps_struct->link_type_name = wcsdup((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
|
||||||
GlobalUnlock(stg.u.hGlobal);
|
GlobalUnlock(stg.u.hGlobal);
|
||||||
GlobalFree(stg.u.hGlobal);
|
GlobalFree(stg.u.hGlobal);
|
||||||
}
|
}
|
||||||
|
@ -182,14 +171,14 @@ static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
|
||||||
{
|
{
|
||||||
WCHAR buf[200];
|
WCHAR buf[200];
|
||||||
LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_SRC, buf, ARRAY_SIZE(buf));
|
LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_SRC, buf, ARRAY_SIZE(buf));
|
||||||
ps_struct->source_name = strdupW(buf);
|
ps_struct->source_name = wcsdup(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ps_struct->type_name == NULL && ps_struct->link_type_name == NULL)
|
if(ps_struct->type_name == NULL && ps_struct->link_type_name == NULL)
|
||||||
{
|
{
|
||||||
WCHAR buf[200];
|
WCHAR buf[200];
|
||||||
LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_TYPE, buf, ARRAY_SIZE(buf));
|
LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_TYPE, buf, ARRAY_SIZE(buf));
|
||||||
ps_struct->type_name = strdupW(buf);
|
ps_struct->type_name = wcsdup(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +425,7 @@ static void update_result_text(HWND hdlg, const ps_struct_t *ps_struct)
|
||||||
/* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropriate type name */
|
/* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropriate type name */
|
||||||
size_t result_txt_len = lstrlenW(pent->lpstrResultText);
|
size_t result_txt_len = lstrlenW(pent->lpstrResultText);
|
||||||
ptrdiff_t offs = (char*)ptr - (char*)resource_txt;
|
ptrdiff_t offs = (char*)ptr - (char*)resource_txt;
|
||||||
result_txt = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(resource_txt) + result_txt_len - 1) * sizeof(WCHAR));
|
result_txt = malloc((wcslen(resource_txt) + result_txt_len - 1) * sizeof(WCHAR));
|
||||||
memcpy(result_txt, resource_txt, offs);
|
memcpy(result_txt, resource_txt, offs);
|
||||||
memcpy((char*)result_txt + offs, pent->lpstrResultText, result_txt_len * sizeof(WCHAR));
|
memcpy((char*)result_txt + offs, pent->lpstrResultText, result_txt_len * sizeof(WCHAR));
|
||||||
memcpy((char*)result_txt + offs + result_txt_len * sizeof(WCHAR), ptr + 2, (lstrlenW(ptr + 2) + 1) * sizeof(WCHAR));
|
memcpy((char*)result_txt + offs + result_txt_len * sizeof(WCHAR), ptr + 2, (lstrlenW(ptr + 2) + 1) * sizeof(WCHAR));
|
||||||
|
@ -447,7 +436,7 @@ static void update_result_text(HWND hdlg, const ps_struct_t *ps_struct)
|
||||||
SetDlgItemTextW(hdlg, IDC_PS_RESULTTEXT, result_txt);
|
SetDlgItemTextW(hdlg, IDC_PS_RESULTTEXT, result_txt);
|
||||||
|
|
||||||
if(result_txt != resource_txt)
|
if(result_txt != resource_txt)
|
||||||
HeapFree(GetProcessHeap(), 0, result_txt);
|
free(result_txt);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,12 +489,12 @@ static void update_structure(HWND hdlg, ps_struct_t *ps_struct)
|
||||||
|
|
||||||
static void free_structure(ps_struct_t *ps_struct)
|
static void free_structure(ps_struct_t *ps_struct)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, ps_struct->type_name);
|
free(ps_struct->type_name);
|
||||||
HeapFree(GetProcessHeap(), 0, ps_struct->source_name);
|
free(ps_struct->source_name);
|
||||||
HeapFree(GetProcessHeap(), 0, ps_struct->link_type_name);
|
free(ps_struct->link_type_name);
|
||||||
HeapFree(GetProcessHeap(), 0, ps_struct->link_source_name);
|
free(ps_struct->link_source_name);
|
||||||
CoTaskMemFree(ps_struct->app_name);
|
CoTaskMemFree(ps_struct->app_name);
|
||||||
HeapFree(GetProcessHeap(), 0, ps_struct);
|
free(ps_struct);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK ps_dlg_proc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
|
static INT_PTR CALLBACK ps_dlg_proc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
|
||||||
|
@ -535,7 +524,7 @@ static INT_PTR CALLBACK ps_dlg_proc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
ps_struct = HeapAlloc(GetProcessHeap(), 0, sizeof(*ps_struct));
|
ps_struct = malloc(sizeof(*ps_struct));
|
||||||
ps_struct->ps = (OLEUIPASTESPECIALW*)lp;
|
ps_struct->ps = (OLEUIPASTESPECIALW*)lp;
|
||||||
ps_struct->type_name = NULL;
|
ps_struct->type_name = NULL;
|
||||||
ps_struct->source_name = NULL;
|
ps_struct->source_name = NULL;
|
||||||
|
@ -649,7 +638,7 @@ UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA psA)
|
||||||
DWORD size = psA->cPasteEntries * sizeof(ps.arrPasteEntries[0]);
|
DWORD size = psA->cPasteEntries * sizeof(ps.arrPasteEntries[0]);
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
ps.arrPasteEntries = HeapAlloc(GetProcessHeap(), 0, size);
|
ps.arrPasteEntries = malloc(size);
|
||||||
memcpy(ps.arrPasteEntries, psA->arrPasteEntries, size);
|
memcpy(ps.arrPasteEntries, psA->arrPasteEntries, size);
|
||||||
for(i = 0; i < psA->cPasteEntries; i++)
|
for(i = 0; i < psA->cPasteEntries; i++)
|
||||||
{
|
{
|
||||||
|
@ -667,14 +656,14 @@ UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA psA)
|
||||||
INT i;
|
INT i;
|
||||||
for(i = 0; i < psA->cPasteEntries; i++)
|
for(i = 0; i < psA->cPasteEntries; i++)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.arrPasteEntries[i].lpstrFormatName);
|
free((WCHAR*)ps.arrPasteEntries[i].lpstrFormatName);
|
||||||
HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.arrPasteEntries[i].lpstrResultText);
|
free((WCHAR*)ps.arrPasteEntries[i].lpstrResultText);
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(), 0, ps.arrPasteEntries);
|
free(ps.arrPasteEntries);
|
||||||
}
|
}
|
||||||
if(!IS_INTRESOURCE(ps.lpszTemplate))
|
if(!IS_INTRESOURCE(ps.lpszTemplate))
|
||||||
HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.lpszTemplate);
|
free((WCHAR*)ps.lpszTemplate);
|
||||||
HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.lpszCaption);
|
free((WCHAR*)ps.lpszCaption);
|
||||||
|
|
||||||
/* Copy back the output fields */
|
/* Copy back the output fields */
|
||||||
psA->dwFlags = ps.dwFlags;
|
psA->dwFlags = ps.dwFlags;
|
||||||
|
|
Loading…
Reference in a new issue