diff options
Diffstat (limited to 'tools/perf/util/print_binary.c')
-rw-r--r-- | tools/perf/util/print_binary.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/tools/perf/util/print_binary.c b/tools/perf/util/print_binary.c index e908177b9976..23e367063446 100644 --- a/tools/perf/util/print_binary.c +++ b/tools/perf/util/print_binary.c | |||
@@ -1,41 +1,44 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
1 | #include "print_binary.h" | 2 | #include "print_binary.h" |
2 | #include <linux/log2.h> | 3 | #include <linux/log2.h> |
3 | #include "sane_ctype.h" | 4 | #include "sane_ctype.h" |
4 | 5 | ||
5 | void print_binary(unsigned char *data, size_t len, | 6 | int binary__fprintf(unsigned char *data, size_t len, |
6 | size_t bytes_per_line, print_binary_t printer, | 7 | size_t bytes_per_line, binary__fprintf_t printer, |
7 | void *extra) | 8 | void *extra, FILE *fp) |
8 | { | 9 | { |
9 | size_t i, j, mask; | 10 | size_t i, j, mask; |
11 | int printed = 0; | ||
10 | 12 | ||
11 | if (!printer) | 13 | if (!printer) |
12 | return; | 14 | return 0; |
13 | 15 | ||
14 | bytes_per_line = roundup_pow_of_two(bytes_per_line); | 16 | bytes_per_line = roundup_pow_of_two(bytes_per_line); |
15 | mask = bytes_per_line - 1; | 17 | mask = bytes_per_line - 1; |
16 | 18 | ||
17 | printer(BINARY_PRINT_DATA_BEGIN, 0, extra); | 19 | printed += printer(BINARY_PRINT_DATA_BEGIN, 0, extra, fp); |
18 | for (i = 0; i < len; i++) { | 20 | for (i = 0; i < len; i++) { |
19 | if ((i & mask) == 0) { | 21 | if ((i & mask) == 0) { |
20 | printer(BINARY_PRINT_LINE_BEGIN, -1, extra); | 22 | printed += printer(BINARY_PRINT_LINE_BEGIN, -1, extra, fp); |
21 | printer(BINARY_PRINT_ADDR, i, extra); | 23 | printed += printer(BINARY_PRINT_ADDR, i, extra, fp); |
22 | } | 24 | } |
23 | 25 | ||
24 | printer(BINARY_PRINT_NUM_DATA, data[i], extra); | 26 | printed += printer(BINARY_PRINT_NUM_DATA, data[i], extra, fp); |
25 | 27 | ||
26 | if (((i & mask) == mask) || i == len - 1) { | 28 | if (((i & mask) == mask) || i == len - 1) { |
27 | for (j = 0; j < mask-(i & mask); j++) | 29 | for (j = 0; j < mask-(i & mask); j++) |
28 | printer(BINARY_PRINT_NUM_PAD, -1, extra); | 30 | printed += printer(BINARY_PRINT_NUM_PAD, -1, extra, fp); |
29 | 31 | ||
30 | printer(BINARY_PRINT_SEP, i, extra); | 32 | printer(BINARY_PRINT_SEP, i, extra, fp); |
31 | for (j = i & ~mask; j <= i; j++) | 33 | for (j = i & ~mask; j <= i; j++) |
32 | printer(BINARY_PRINT_CHAR_DATA, data[j], extra); | 34 | printed += printer(BINARY_PRINT_CHAR_DATA, data[j], extra, fp); |
33 | for (j = 0; j < mask-(i & mask); j++) | 35 | for (j = 0; j < mask-(i & mask); j++) |
34 | printer(BINARY_PRINT_CHAR_PAD, i, extra); | 36 | printed += printer(BINARY_PRINT_CHAR_PAD, i, extra, fp); |
35 | printer(BINARY_PRINT_LINE_END, -1, extra); | 37 | printed += printer(BINARY_PRINT_LINE_END, -1, extra, fp); |
36 | } | 38 | } |
37 | } | 39 | } |
38 | printer(BINARY_PRINT_DATA_END, -1, extra); | 40 | printed += printer(BINARY_PRINT_DATA_END, -1, extra, fp); |
41 | return printed; | ||
39 | } | 42 | } |
40 | 43 | ||
41 | int is_printable_array(char *p, unsigned int len) | 44 | int is_printable_array(char *p, unsigned int len) |