18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef PERF_PRINT_BINARY_H
38c2ecf20Sopenharmony_ci#define PERF_PRINT_BINARY_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <stddef.h>
68c2ecf20Sopenharmony_ci#include <stdio.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cienum binary_printer_ops {
98c2ecf20Sopenharmony_ci	BINARY_PRINT_DATA_BEGIN,
108c2ecf20Sopenharmony_ci	BINARY_PRINT_LINE_BEGIN,
118c2ecf20Sopenharmony_ci	BINARY_PRINT_ADDR,
128c2ecf20Sopenharmony_ci	BINARY_PRINT_NUM_DATA,
138c2ecf20Sopenharmony_ci	BINARY_PRINT_NUM_PAD,
148c2ecf20Sopenharmony_ci	BINARY_PRINT_SEP,
158c2ecf20Sopenharmony_ci	BINARY_PRINT_CHAR_DATA,
168c2ecf20Sopenharmony_ci	BINARY_PRINT_CHAR_PAD,
178c2ecf20Sopenharmony_ci	BINARY_PRINT_LINE_END,
188c2ecf20Sopenharmony_ci	BINARY_PRINT_DATA_END,
198c2ecf20Sopenharmony_ci};
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_citypedef int (*binary__fprintf_t)(enum binary_printer_ops op,
228c2ecf20Sopenharmony_ci				 unsigned int val, void *extra, FILE *fp);
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ciint binary__fprintf(unsigned char *data, size_t len,
258c2ecf20Sopenharmony_ci		    size_t bytes_per_line, binary__fprintf_t printer,
268c2ecf20Sopenharmony_ci		    void *extra, FILE *fp);
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic inline void print_binary(unsigned char *data, size_t len,
298c2ecf20Sopenharmony_ci				size_t bytes_per_line, binary__fprintf_t printer,
308c2ecf20Sopenharmony_ci				void *extra)
318c2ecf20Sopenharmony_ci{
328c2ecf20Sopenharmony_ci	binary__fprintf(data, len, bytes_per_line, printer, extra, stdout);
338c2ecf20Sopenharmony_ci}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciint is_printable_array(char *p, unsigned int len);
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#endif /* PERF_PRINT_BINARY_H */
38