* Copyright (c) 2001-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Daniel Reinhold, danielre@users.sf.net
* John Scipione, jscipione@gmail.com
*/
#include <ctype.h>
#include <image.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <OS.h>
static status_t
list_images_for_team_by_id(team_id id)
{
image_info imageInfo;
int32 cookie = 0;
team_info teamInfo;
char* header;
char* format;
int i;
status_t result = get_team_info(id, &teamInfo);
if (id != 1 && result < B_OK)
return result;
i = asprintf(&header, " ID %*s %*s Seq# Init# Name",
sizeof(uintptr_t) * 2, "Text", sizeof(uintptr_t) * 2, "Data");
if (i == -1)
return B_NO_MEMORY;
i = asprintf(&format, "%%5" B_PRId32 " 0x%%0%" B_PRIu32 PRIxPTR
" 0x%%0%" B_PRIu32 PRIxPTR " %%4" B_PRId32 " %%10" B_PRIu32 " %%s\n",
sizeof(uintptr_t) * 2, sizeof(uintptr_t) * 2);
if (i == -1) {
free(header);
return B_NO_MEMORY;
}
if (id == 1)
printf("\nKERNEL TEAM:\n");
else
printf("\nTEAM %4" B_PRId32 " (%s):\n", id, teamInfo.args);
puts(header);
for (i = 0; i < 80; i++)
putchar('-');
printf("\n");
while ((result = get_next_image_info(id, &cookie, &imageInfo)) == B_OK) {
printf(format, imageInfo.id, imageInfo.text, imageInfo.data,
imageInfo.sequence, imageInfo.init_order, imageInfo.name);
}
free(header);
free(format);
if (result != B_ENTRY_NOT_FOUND && result != EINVAL) {
printf("get images failed: %s\n", strerror(result));
return result;
}
return B_OK;
}
static void
list_images_for_team(const char* arg)
{
int32 cookie = 0;
team_info info;
status_t result;
if (atoi(arg) > 0 && list_images_for_team_by_id(atoi(arg)) == B_OK)
return;
while (get_next_team_info(&cookie, &info) >= B_OK) {
if (strstr(info.args, arg)) {
result = list_images_for_team_by_id(info.team);
if (result != B_OK) {
printf("\nCould not retrieve information about team %"
B_PRId32 ": %s\n", info.team, strerror(result));
}
}
}
}
int
main(int argc, char** argv)
{
int32 cookie = 0;
team_info info;
status_t result;
if (argc == 1) {
while (get_next_team_info(&cookie, &info) >= B_OK) {
result = list_images_for_team_by_id(info.team);
if (result != B_OK) {
printf("\nCould not retrieve information about team %"
B_PRId32 ": %s\n", info.team, strerror(result));
}
}
} else {
while (--argc > 0 && ++argv != NULL)
list_images_for_team(*argv);
}
return 0;
}