xref: /haiku/src/bin/message.cpp (revision 17889a8c70dbb3d59c1412f6431968753c767bab)
1 /*
2  * Copyright 2009, Michael Lotz, mmlr@mlotz.ch.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include <File.h>
7 #include <Message.h>
8 
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 
13 
14 int
15 main(int argc, char *argv[])
16 {
17 	if (argc < 2 || argc > 3) {
18 		printf("usage: %s <flattened message file> [index]\n", argv[0]);
19 		return 1;
20 	}
21 
22 	BFile input(argv[1], B_READ_ONLY);
23 	if (!input.IsReadable()) {
24 		printf("cannot open \"%s\" for reading\n", argv[1]);
25 		return 2;
26 	}
27 
28 	off_t fileSize;
29 	status_t result;
30 	if ((result = input.GetSize(&fileSize)) != B_OK) {
31 		printf("cannot determine size of file \"%s\"\n", argv[1]);
32 		return 3;
33 	}
34 
35 	int index = argc > 2 ? atoi(argv[2]) : 0;
36 
37 	for (int i = 1; input.Position() < fileSize; ++i) {
38 		BMessage message;
39 		result = message.Unflatten(&input);
40 		if (result != B_OK) {
41 			printf("failed to unflatten message: %s\n", strerror(result));
42 			return 4;
43 		}
44 		if (index == 0 || i == index)
45 			message.PrintToStream();
46 	}
47 
48 	return 0;
49 }
50