]> Git Repo - linux.git/blob - tools/perf/util/print_binary.c
Merge tag 'perf-core-for-mingo-4.15-20171103' of git://git.kernel.org/pub/scm/linux...
[linux.git] / tools / perf / util / print_binary.c
1 #include "print_binary.h"
2 #include <linux/log2.h>
3 #include "sane_ctype.h"
4
5 int binary__fprintf(unsigned char *data, size_t len,
6                     size_t bytes_per_line, binary__fprintf_t printer,
7                     void *extra, FILE *fp)
8 {
9         size_t i, j, mask;
10         int printed = 0;
11
12         if (!printer)
13                 return 0;
14
15         bytes_per_line = roundup_pow_of_two(bytes_per_line);
16         mask = bytes_per_line - 1;
17
18         printed += printer(BINARY_PRINT_DATA_BEGIN, 0, extra, fp);
19         for (i = 0; i < len; i++) {
20                 if ((i & mask) == 0) {
21                         printed += printer(BINARY_PRINT_LINE_BEGIN, -1, extra, fp);
22                         printed += printer(BINARY_PRINT_ADDR, i, extra, fp);
23                 }
24
25                 printed += printer(BINARY_PRINT_NUM_DATA, data[i], extra, fp);
26
27                 if (((i & mask) == mask) || i == len - 1) {
28                         for (j = 0; j < mask-(i & mask); j++)
29                                 printed += printer(BINARY_PRINT_NUM_PAD, -1, extra, fp);
30
31                         printer(BINARY_PRINT_SEP, i, extra, fp);
32                         for (j = i & ~mask; j <= i; j++)
33                                 printed += printer(BINARY_PRINT_CHAR_DATA, data[j], extra, fp);
34                         for (j = 0; j < mask-(i & mask); j++)
35                                 printed += printer(BINARY_PRINT_CHAR_PAD, i, extra, fp);
36                         printed += printer(BINARY_PRINT_LINE_END, -1, extra, fp);
37                 }
38         }
39         printed += printer(BINARY_PRINT_DATA_END, -1, extra, fp);
40         return printed;
41 }
42
43 int is_printable_array(char *p, unsigned int len)
44 {
45         unsigned int i;
46
47         if (!p || !len || p[len - 1] != 0)
48                 return 0;
49
50         len--;
51
52         for (i = 0; i < len; i++) {
53                 if (!isprint(p[i]) && !isspace(p[i]))
54                         return 0;
55         }
56         return 1;
57 }
This page took 0.038381 seconds and 4 git commands to generate.