From ac1f1a926e746896f2cea93cc56ee2cb53d91027 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 24 Apr 2016 17:30:52 +0200 Subject: [PATCH] kernel: +image_iterate_through_team_images() Like image_iterate_through_images(), but iterates though the images of the given team only. --- headers/private/kernel/kimage.h | 2 ++ src/system/kernel/image.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/headers/private/kernel/kimage.h b/headers/private/kernel/kimage.h index adbc70a9d5f..cc8495c2df8 100644 --- a/headers/private/kernel/kimage.h +++ b/headers/private/kernel/kimage.h @@ -49,6 +49,8 @@ extern status_t remove_images(Team *team); typedef bool (*image_iterator_callback)(struct image* image, void* cookie); struct image* image_iterate_through_images(image_iterator_callback callback, void* cookie); +struct image* image_iterate_through_team_images(team_id teamID, + image_iterator_callback callback, void* cookie); extern status_t image_debug_lookup_user_symbol_address(Team *team, addr_t address, addr_t *_baseAddress, const char **_symbolName, diff --git a/src/system/kernel/image.cpp b/src/system/kernel/image.cpp index 58526c00909..de985c33b4e 100644 --- a/src/system/kernel/image.cpp +++ b/src/system/kernel/image.cpp @@ -298,6 +298,31 @@ image_iterate_through_images(image_iterator_callback callback, void* cookie) } +struct image* +image_iterate_through_team_images(team_id teamID, + image_iterator_callback callback, void* cookie) +{ + // get the team + Team* team = Team::Get(teamID); + if (team == NULL) + return NULL; + BReference teamReference(team, true); + + // iterate through the team's images + MutexLocker imageLocker(sImageMutex); + + struct image* image = NULL; + + while ((image = (struct image*)list_get_next_item(&team->image_list, + image)) != NULL) { + if (callback(image, cookie)) + break; + } + + return image; +} + + status_t image_debug_lookup_user_symbol_address(Team *team, addr_t address, addr_t *_baseAddress, const char **_symbolName, const char **_imageName,