xref: /haiku/src/bin/listimage.c (revision 1214ef1b2100f2b3299fc9d8d6142e46f70a4c3f)
1 /*
2  * Copyright (c) 2001-2005, Haiku.
3  *
4  * This software is part of the Haiku distribution and is covered
5  * by the MIT license.
6  *
7  * Author: Daniel Reinhold (danielre@users.sf.net)
8  */
9 
10 /**	Description: lists image info for all currently running teams */
11 
12 
13 #include <OS.h>
14 #include <image.h>
15 
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include <string.h>
19 #include <ctype.h>
20 
21 
22 static status_t
23 list_images_for_team_by_id(team_id id)
24 {
25 	team_info teamInfo;
26 	image_info imageInfo;
27 	int32 cookie = 0;
28 	status_t status;
29 
30 	status = get_team_info(id, &teamInfo);
31 	if (id != 1 && status < B_OK)
32 		return status;
33 
34 	if (id == 1)
35 		printf("\nKERNEL TEAM:\n");
36 	else
37 		printf("\nTEAM %4ld (%s):\n", id, teamInfo.args);
38 	printf("   ID                                                             name       text       data seq#      init#\n");
39 	printf("------------------------------------------------------------------------------------------------------------\n");
40 
41 	while ((status = get_next_image_info(id, &cookie, &imageInfo)) == B_OK) {
42 		printf("%5ld %64s %p %p %4ld %10lu\n",
43 			imageInfo.id,
44 			imageInfo.name,
45 			imageInfo.text,
46 			imageInfo.data,
47 			imageInfo.sequence,
48 			imageInfo.init_order);
49 	}
50 	if (status != B_ENTRY_NOT_FOUND && status != EINVAL) {
51 		printf("get images failed: %s\n", strerror(status));
52 		return status;
53 	}
54 	return B_OK;
55 }
56 
57 
58 static void
59 list_images_for_team(const char *arg)
60 {
61 	int32 cookie = 0;
62 	team_info info;
63 
64 	if (atoi(arg) > 0) {
65 		if (list_images_for_team_by_id(atoi(arg)) == B_OK)
66 			return;
67 	}
68 
69 	// search for the team by name
70 
71 	while (get_next_team_info(&cookie, &info) >= B_OK) {
72 		if (strstr(info.args, arg)) {
73 			status_t status = list_images_for_team_by_id(info.team);
74 			if (status != B_OK)
75 				printf("\nCould not retrieve information about team %ld: %s\n",
76 					info.team, strerror(status));
77 		}
78 	}
79 }
80 
81 
82 int
83 main(int argc, char **argv)
84 {
85 	if (argc == 1) {
86 		int32 cookie = 0;
87 		team_info info;
88 
89 		// list for all teams
90 		while (get_next_team_info(&cookie, &info) >= B_OK) {
91 			status_t status = list_images_for_team_by_id(info.team);
92 			if (status != B_OK)
93 				printf("\nCould not retrieve information about team %ld: %s\n",
94 					info.team, strerror(status));
95 		}
96 	} else {
97 		// list for each team_id on the command line
98 		while (--argc)
99 			list_images_for_team(*++argv);
100 	}
101 	return 0;
102 }
103 
104