/***********************************************************************
* Data
*/
-LIST_ENTRY image_list = { &image_list, &image_list };
+
+static PLOADED_IMAGE IMAGEHLP_pFirstLoadedImage=NULL;
DECLSPEC_HIDDEN extern HANDLE IMAGEHLP_hHeap;
/***********************************************************************
* ImageLoad (IMAGEHLP.@)
*/
-PLOADED_IMAGE WINAPI ImageLoad(PCSTR dll_name, PCSTR dll_path)
+PLOADED_IMAGE WINAPI ImageLoad(PCSTR DllName, PCSTR DllPath)
{
- LOADED_IMAGE *image;
-
- 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;
+ PLOADED_IMAGE pLoadedImage;
+
+ 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;
-
- FIXME("(%p)\n", loaded_image);
+ LIST_ENTRY *pCurrent, *pFind;
- 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;
}
/***********************************************************************