[IMAGEHLP] Sync with Wine 3.0. CORE-14225

This commit is contained in:
Amine Khaldi 2018-01-19 00:37:52 +01:00
parent c4b0f2155f
commit fc87cf0bc3
3 changed files with 83 additions and 212 deletions

View file

@ -25,7 +25,8 @@
/***********************************************************************
* Data
*/
LIST_ENTRY image_list = { &image_list, &image_list };
static PLOADED_IMAGE IMAGEHLP_pFirstLoadedImage=NULL;
DECLSPEC_HIDDEN extern HANDLE IMAGEHLP_hHeap;
@ -60,69 +61,57 @@ DWORD WINAPI GetImageUnusedHeaderBytes(
/***********************************************************************
* ImageLoad (IMAGEHLP.@)
*/
PLOADED_IMAGE WINAPI ImageLoad(PCSTR dll_name, PCSTR dll_path)
PLOADED_IMAGE WINAPI ImageLoad(PCSTR DllName, PCSTR DllPath)
{
LOADED_IMAGE *image;
PLOADED_IMAGE pLoadedImage;
TRACE("(%s, %s)\n", dll_name, dll_path);
image = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(*image));
if (!image) return NULL;
if (!MapAndLoad(dll_name, dll_path, image, TRUE, TRUE))
{
HeapFree(IMAGEHLP_hHeap, 0, image);
return NULL;
}
image->Links.Flink = image_list.Flink;
image->Links.Blink = &image_list;
image_list.Flink->Blink = &image->Links;
image_list.Flink = &image->Links;
return image;
FIXME("(%s, %s): stub\n", DllName, DllPath);
pLoadedImage = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE));
if (pLoadedImage)
pLoadedImage->FileHeader = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(IMAGE_NT_HEADERS));
return pLoadedImage;
}
/***********************************************************************
* ImageUnload (IMAGEHLP.@)
*/
BOOL WINAPI ImageUnload(PLOADED_IMAGE loaded_image)
BOOL WINAPI ImageUnload(PLOADED_IMAGE pLoadedImage)
{
LIST_ENTRY *entry, *mark;
PLOADED_IMAGE image;
LIST_ENTRY *pCurrent, *pFind;
FIXME("(%p)\n", loaded_image);
if (!loaded_image)
TRACE("(%p)\n", pLoadedImage);
if(!IMAGEHLP_pFirstLoadedImage || !pLoadedImage)
{
/* No image loaded or null pointer */
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
/* No image loaded or null pointer */
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
/* FIXME: do we really need to check this? */
mark = &image_list;
for (entry = mark->Flink; entry != mark; entry = entry->Flink)
pFind=&pLoadedImage->Links;
pCurrent=&IMAGEHLP_pFirstLoadedImage->Links;
while((pCurrent != pFind) &&
(pCurrent != NULL))
pCurrent = pCurrent->Flink;
if(!pCurrent)
{
image = CONTAINING_RECORD(entry, LOADED_IMAGE, Links);
if (image == loaded_image)
break;
/* Not found */
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if (entry == mark)
{
/* Not found */
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(pCurrent->Blink)
pCurrent->Blink->Flink = pCurrent->Flink;
else
IMAGEHLP_pFirstLoadedImage = pCurrent->Flink?CONTAINING_RECORD(
pCurrent->Flink, LOADED_IMAGE, Links):NULL;
entry->Blink->Flink = entry->Flink;
entry->Flink->Blink = entry->Blink;
if(pCurrent->Flink)
pCurrent->Flink->Blink = pCurrent->Blink;
UnMapAndLoad(loaded_image);
HeapFree(IMAGEHLP_hHeap, 0, loaded_image);
return TRUE;
return FALSE;
}
/***********************************************************************