get_sorted_image_list(): Allow passing a NULL image argument, meaning that
all loaded images will be sorted and returned. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39305 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -142,13 +142,11 @@ static uint32
|
|||||||
topological_sort(image_t* image, uint32 slot, image_t** initList,
|
topological_sort(image_t* image, uint32 slot, image_t** initList,
|
||||||
uint32 sortFlag)
|
uint32 sortFlag)
|
||||||
{
|
{
|
||||||
uint32 i;
|
|
||||||
|
|
||||||
if (image->flags & sortFlag)
|
if (image->flags & sortFlag)
|
||||||
return slot;
|
return slot;
|
||||||
|
|
||||||
image->flags |= sortFlag; /* make sure we don't visit this one */
|
image->flags |= sortFlag; /* make sure we don't visit this one */
|
||||||
for (i = 0; i < image->num_needed; i++)
|
for (uint32 i = 0; i < image->num_needed; i++)
|
||||||
slot = topological_sort(image->needed[i], slot, initList, sortFlag);
|
slot = topological_sort(image->needed[i], slot, initList, sortFlag);
|
||||||
|
|
||||||
initList[slot] = image;
|
initList[slot] = image;
|
||||||
@@ -612,6 +610,24 @@ clear_image_flags_recursively(image_t* image, uint32 flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! Returns a topologically sorted image list.
|
||||||
|
|
||||||
|
If \a image is non-NULL, an array containing the image and all its
|
||||||
|
transitive dependencies is returned. If \a image is NULL, all loaded images
|
||||||
|
are returned. In either case dependencies are listed before images
|
||||||
|
depending on them.
|
||||||
|
|
||||||
|
\param image The image specifying the tree of images that shall be sorted.
|
||||||
|
If NULL, all loaded images are sorted.
|
||||||
|
\param _list On success it will be set to an array of the sorted images.
|
||||||
|
The caller is responsible for free()ing it.
|
||||||
|
\param sortFlags The image flag that shall be used for sorting. Images that
|
||||||
|
already have this flag set are ignored (and their dependencies, unless
|
||||||
|
they are also reachable via another path). The flag will be set on all
|
||||||
|
returned images.
|
||||||
|
\return The number of images in the returned array or an error code on
|
||||||
|
failure.
|
||||||
|
*/
|
||||||
ssize_t
|
ssize_t
|
||||||
get_sorted_image_list(image_t* image, image_t*** _list, uint32 sortFlag)
|
get_sorted_image_list(image_t* image, image_t*** _list, uint32 sortFlag)
|
||||||
{
|
{
|
||||||
@@ -627,5 +643,17 @@ get_sorted_image_list(image_t* image, image_t*** _list, uint32 sortFlag)
|
|||||||
memset(list, 0, sLoadedImageCount * sizeof(image_t*));
|
memset(list, 0, sLoadedImageCount * sizeof(image_t*));
|
||||||
|
|
||||||
*_list = list;
|
*_list = list;
|
||||||
return topological_sort(image, 0, list, sortFlag);
|
|
||||||
|
if (image != NULL)
|
||||||
|
return topological_sort(image, 0, list, sortFlag);
|
||||||
|
|
||||||
|
// no image given -- sort all loaded images
|
||||||
|
uint32 count = 0;
|
||||||
|
image = sLoadedImages.head;
|
||||||
|
while (image != NULL) {
|
||||||
|
count = topological_sort(image, count, list, sortFlag);
|
||||||
|
image = image->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user