Continuing the split of util.[ch] into more manageable bits.
Unified · Split
| @@ -23,6 +23,7 @@ · 22 unmodified lines | ||
| 23 | 23 | #include "util/stat.h" |
| 24 | 24 | #include "util/thread-stack.h" |
| 25 | 25 | #include "util/time-utils.h" |
| 26 | +#include "print_binary.h" | |
| 26 | 27 | #include <linux/bitmap.h> |
| 27 | 28 | #include <linux/kernel.h> |
| 28 | 29 | #include <linux/stringify.h> |
| @@ -36,6 +36,7 @@ · 35 unmodified lines | ||
| 36 | 36 | #include "util/parse-events.h" |
| 37 | 37 | #include "util/bpf-loader.h" |
| 38 | 38 | #include "callchain.h" |
| 39 | +#include "print_binary.h" | |
| 39 | 40 | #include "syscalltbl.h" |
| 40 | 41 | #include "rb_resort.h" |
| 41 | 42 | |
| @@ -2,7 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | #include <linux/kernel.h> |
| 3 | 3 | #include "tests.h" |
| 4 | 4 | #include "debug.h" |
| 5 | −#include "util.h" | |
| 5 | +#include "print_binary.h" | |
| 6 | 6 | |
| 7 | 7 | int test__is_printable_array(int subtest __maybe_unused) |
| 8 | 8 | { |
| @@ -16,6 +16,7 @@ libperf-y += llvm-utils.o · 15 unmodified lines | ||
| 16 | 16 | libperf-y += parse-events.o |
| 17 | 17 | libperf-y += perf_regs.o |
| 18 | 18 | libperf-y += path.o |
| 19 | +libperf-y += print_binary.o | |
| 19 | 20 | libperf-y += rbtree.o |
| 20 | 21 | libperf-y += libstring.o |
| 21 | 22 | libperf-y += bitmap.o |
| @@ -13,6 +13,7 @@ · 12 unmodified lines | ||
| 13 | 13 | #include "color.h" |
| 14 | 14 | #include "event.h" |
| 15 | 15 | #include "debug.h" |
| 16 | +#include "print_binary.h" | |
| 16 | 17 | #include "util.h" |
| 17 | 18 | #include "target.h" |
| 18 | 19 | |
| @@ -0,0 +1,55 @@ | ||
| 1 | +#include "print_binary.h" | |
| 2 | +#include <linux/log2.h> | |
| 3 | +#include "sane_ctype.h" | |
| 4 | + | |
| 5 | +void print_binary(unsigned char *data, size_t len, | |
| 6 | + size_t bytes_per_line, print_binary_t printer, | |
| 7 | + void *extra) | |
| 8 | +{ | |
| 9 | + size_t i, j, mask; | |
| 10 | + | |
| 11 | + if (!printer) | |
| 12 | + return; | |
| 13 | + | |
| 14 | + bytes_per_line = roundup_pow_of_two(bytes_per_line); | |
| 15 | + mask = bytes_per_line - 1; | |
| 16 | + | |
| 17 | + printer(BINARY_PRINT_DATA_BEGIN, 0, extra); | |
| 18 | + for (i = 0; i < len; i++) { | |
| 19 | + if ((i & mask) == 0) { | |
| 20 | + printer(BINARY_PRINT_LINE_BEGIN, -1, extra); | |
| 21 | + printer(BINARY_PRINT_ADDR, i, extra); | |
| 22 | + } | |
| 23 | + | |
| 24 | + printer(BINARY_PRINT_NUM_DATA, data[i], extra); | |
| 25 | + | |
| 26 | + if (((i & mask) == mask) || i == len - 1) { | |
| 27 | + for (j = 0; j < mask-(i & mask); j++) | |
| 28 | + printer(BINARY_PRINT_NUM_PAD, -1, extra); | |
| 29 | + | |
| 30 | + printer(BINARY_PRINT_SEP, i, extra); | |
| 31 | + for (j = i & ~mask; j <= i; j++) | |
| 32 | + printer(BINARY_PRINT_CHAR_DATA, data[j], extra); | |
| 33 | + for (j = 0; j < mask-(i & mask); j++) | |
| 34 | + printer(BINARY_PRINT_CHAR_PAD, i, extra); | |
| 35 | + printer(BINARY_PRINT_LINE_END, -1, extra); | |
| 36 | + } | |
| 37 | + } | |
| 38 | + printer(BINARY_PRINT_DATA_END, -1, extra); | |
| 39 | +} | |
| 40 | + | |
| 41 | +int is_printable_array(char *p, unsigned int len) | |
| 42 | +{ | |
| 43 | + unsigned int i; | |
| 44 | + | |
| 45 | + if (!p || !len || p[len - 1] != 0) | |
| 46 | + return 0; | |
| 47 | + | |
| 48 | + len--; | |
| 49 | + | |
| 50 | + for (i = 0; i < len; i++) { | |
| 51 | + if (!isprint(p[i]) && !isspace(p[i])) | |
| 52 | + return 0; | |
| 53 | + } | |
| 54 | + return 1; | |
| 55 | +} | |
| @@ -0,0 +1,28 @@ | ||
| 1 | +#ifndef PERF_PRINT_BINARY_H | |
| 2 | +#define PERF_PRINT_BINARY_H | |
| 3 | + | |
| 4 | +#include <stddef.h> | |
| 5 | + | |
| 6 | +enum binary_printer_ops { | |
| 7 | + BINARY_PRINT_DATA_BEGIN, | |
| 8 | + BINARY_PRINT_LINE_BEGIN, | |
| 9 | + BINARY_PRINT_ADDR, | |
| 10 | + BINARY_PRINT_NUM_DATA, | |
| 11 | + BINARY_PRINT_NUM_PAD, | |
| 12 | + BINARY_PRINT_SEP, | |
| 13 | + BINARY_PRINT_CHAR_DATA, | |
| 14 | + BINARY_PRINT_CHAR_PAD, | |
| 15 | + BINARY_PRINT_LINE_END, | |
| 16 | + BINARY_PRINT_DATA_END, | |
| 17 | +}; | |
| 18 | + | |
| 19 | +typedef void (*print_binary_t)(enum binary_printer_ops op, | |
| 20 | + unsigned int val, void *extra); | |
| 21 | + | |
| 22 | +void print_binary(unsigned char *data, size_t len, | |
| 23 | + size_t bytes_per_line, print_binary_t printer, | |
| 24 | + void *extra); | |
| 25 | + | |
| 26 | +int is_printable_array(char *p, unsigned int len); | |
| 27 | + | |
| 28 | +#endif /* PERF_PRINT_BINARY_H */ | |
| @@ -21,6 +21,7 @@ util/cgroup.c · 20 unmodified lines | ||
| 21 | 21 | util/parse-branch-options.c |
| 22 | 22 | util/rblist.c |
| 23 | 23 | util/counts.c |
| 24 | +util/print_binary.c | |
| 24 | 25 | util/strlist.c |
| 25 | 26 | util/trace-event.c |
| 26 | 27 | ../lib/rbtree.c |
| @@ -7,6 +7,7 @@ · 6 unmodified lines | ||
| 7 | 7 | #include "evsel.h" |
| 8 | 8 | #include "event.h" |
| 9 | 9 | #include "cpumap.h" |
| 10 | +#include "print_binary.h" | |
| 10 | 11 | #include "thread_map.h" |
| 11 | 12 | |
| 12 | 13 | /* |
| @@ -46,6 +46,7 @@ · 45 unmodified lines | ||
| 46 | 46 | #include "../call-path.h" |
| 47 | 47 | #include "thread_map.h" |
| 48 | 48 | #include "cpumap.h" |
| 49 | +#include "print_binary.h" | |
| 49 | 50 | #include "stat.h" |
| 50 | 51 | |
| 51 | 52 | PyMODINIT_FUNC initperf_trace_context(void); |
| @@ -21,8 +21,6 @@ · 20 unmodified lines | ||
| 21 | 21 | #include "callchain.h" |
| 22 | 22 | #include "strlist.h" |
| 23 | 23 | |
| 24 | −#include "sane_ctype.h" | |
| 25 | − | |
| 26 | 24 | #define CALLCHAIN_PARAM_DEFAULT \ |
| 27 | 25 | .mode = CHAIN_GRAPH_ABS, \ |
| 28 | 26 | .min_percent = 0.5, \ |
| @@ -742,58 +740,6 @@ int fetch_current_timestamp(char *buf, size_t sz) · 713 unmodified lines | ||
| 742 | 740 | return 0; |
| 743 | 741 | } |
| 744 | 742 | |
| 745 | −void print_binary(unsigned char *data, size_t len, | |
| 746 | − size_t bytes_per_line, print_binary_t printer, | |
| 747 | − void *extra) | |
| 748 | −{ | |
| 749 | − size_t i, j, mask; | |
| 750 | − | |
| 751 | − if (!printer) | |
| 752 | − return; | |
| 753 | − | |
| 754 | − bytes_per_line = roundup_pow_of_two(bytes_per_line); | |
| 755 | − mask = bytes_per_line - 1; | |
| 756 | − | |
| 757 | − printer(BINARY_PRINT_DATA_BEGIN, 0, extra); | |
| 758 | − for (i = 0; i < len; i++) { | |
| 759 | − if ((i & mask) == 0) { | |
| 760 | − printer(BINARY_PRINT_LINE_BEGIN, -1, extra); | |
| 761 | − printer(BINARY_PRINT_ADDR, i, extra); | |
| 762 | − } | |
| 763 | − | |
| 764 | − printer(BINARY_PRINT_NUM_DATA, data[i], extra); | |
| 765 | − | |
| 766 | − if (((i & mask) == mask) || i == len - 1) { | |
| 767 | − for (j = 0; j < mask-(i & mask); j++) | |
| 768 | − printer(BINARY_PRINT_NUM_PAD, -1, extra); | |
| 769 | − | |
| 770 | − printer(BINARY_PRINT_SEP, i, extra); | |
| 771 | − for (j = i & ~mask; j <= i; j++) | |
| 772 | − printer(BINARY_PRINT_CHAR_DATA, data[j], extra); | |
| 773 | − for (j = 0; j < mask-(i & mask); j++) | |
| 774 | − printer(BINARY_PRINT_CHAR_PAD, i, extra); | |
| 775 | − printer(BINARY_PRINT_LINE_END, -1, extra); | |
| 776 | − } | |
| 777 | − } | |
| 778 | − printer(BINARY_PRINT_DATA_END, -1, extra); | |
| 779 | −} | |
| 780 | − | |
| 781 | −int is_printable_array(char *p, unsigned int len) | |
| 782 | −{ | |
| 783 | − unsigned int i; | |
| 784 | − | |
| 785 | − if (!p || !len || p[len - 1] != 0) | |
| 786 | − return 0; | |
| 787 | − | |
| 788 | − len--; | |
| 789 | − | |
| 790 | − for (i = 0; i < len; i++) { | |
| 791 | − if (!isprint(p[i]) && !isspace(p[i])) | |
| 792 | − return 0; | |
| 793 | − } | |
| 794 | − return 1; | |
| 795 | −} | |
| 796 | − | |
| 797 | 743 | int unit_number__scnprintf(char *buf, size_t size, u64 n) |
| 798 | 744 | { |
| 799 | 745 | char unit[4] = "BKMG"; |
| @@ -213,33 +213,10 @@ const char *perf_tip(const char *dirpath); · 212 unmodified lines | ||
| 213 | 213 | bool is_regular_file(const char *file); |
| 214 | 214 | int fetch_current_timestamp(char *buf, size_t sz); |
| 215 | 215 | |
| 216 | −enum binary_printer_ops { | |
| 217 | − BINARY_PRINT_DATA_BEGIN, | |
| 218 | − BINARY_PRINT_LINE_BEGIN, | |
| 219 | − BINARY_PRINT_ADDR, | |
| 220 | − BINARY_PRINT_NUM_DATA, | |
| 221 | − BINARY_PRINT_NUM_PAD, | |
| 222 | − BINARY_PRINT_SEP, | |
| 223 | − BINARY_PRINT_CHAR_DATA, | |
| 224 | − BINARY_PRINT_CHAR_PAD, | |
| 225 | − BINARY_PRINT_LINE_END, | |
| 226 | − BINARY_PRINT_DATA_END, | |
| 227 | −}; | |
| 228 | − | |
| 229 | −typedef void (*print_binary_t)(enum binary_printer_ops, | |
| 230 | − unsigned int val, | |
| 231 | − void *extra); | |
| 232 | − | |
| 233 | −void print_binary(unsigned char *data, size_t len, | |
| 234 | − size_t bytes_per_line, print_binary_t printer, | |
| 235 | − void *extra); | |
| 236 | − | |
| 237 | 216 | #ifndef HAVE_SCHED_GETCPU_SUPPORT |
| 238 | 217 | int sched_getcpu(void); |
| 239 | 218 | #endif |
| 240 | 219 | |
| 241 | −int is_printable_array(char *p, unsigned int len); | |
| 242 | − | |
| 243 | 220 | int timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz); |
| 244 | 221 | |
| 245 | 222 | int unit_number__scnprintf(char *buf, size_t size, u64 n); |