]>
Commit | Line | Data |
---|---|---|
1 | #include "compat.h" | |
2 | ||
3 | struct slab_log_entry | |
4 | { | |
5 | struct timeval tv; | |
6 | void *slab; | |
7 | ssize_t size; | |
8 | }; | |
9 | ||
10 | static void | |
11 | read_log_file(const char *name) | |
12 | { | |
13 | struct slab_log_entry sle; | |
14 | FILE *log; | |
15 | ||
16 | log = fopen(name, "r"); | |
17 | if (!log) | |
18 | { | |
19 | fprintf(stderr, "Unable to open %s: %s\n", name, strerror(errno)); | |
20 | return; | |
21 | } | |
22 | ||
23 | while (fread(&sle, sizeof(sle), 1, log) == 1) | |
24 | { | |
25 | fprintf(stdout, "%ld.%06ld %p ", (long)sle.tv.tv_sec, (long)sle.tv.tv_usec, sle.slab); | |
26 | if (sle.size > 0) | |
27 | { | |
28 | fprintf(stdout, "-> %zd\n", sle.size); | |
29 | } | |
30 | else if (sle.size < 0) | |
31 | { | |
32 | fprintf(stdout, "<- %zd\n", -sle.size); | |
33 | } | |
34 | else /* slze.size == 0 */ | |
35 | { | |
36 | fprintf(stdout, "unmap\n"); | |
37 | } | |
38 | } | |
39 | } | |
40 | ||
41 | int | |
42 | main(int argc, char *argv[]) | |
43 | { | |
44 | int ii; | |
45 | ||
46 | if (argc < 2) | |
47 | { | |
48 | fprintf(stderr, "Usage: %s <logfile ...>\n", argv[0]); | |
49 | return 1; | |
50 | } | |
51 | ||
52 | for (ii = 1; ii < argc; ++ii) | |
53 | { | |
54 | read_log_file(argv[ii]); | |
55 | } | |
56 | return 0; | |
57 | } |