mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 10:55:50 +00:00
[IMAGEHLP] Sync with Wine 3.0. CORE-14225
This commit is contained in:
parent
c4b0f2155f
commit
fc87cf0bc3
3 changed files with 83 additions and 212 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue