162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef PERF_PRINT_BINARY_H
362306a36Sopenharmony_ci#define PERF_PRINT_BINARY_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <stddef.h>
662306a36Sopenharmony_ci#include <stdio.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_cienum binary_printer_ops {
962306a36Sopenharmony_ci	BINARY_PRINT_DATA_BEGIN,
1062306a36Sopenharmony_ci	BINARY_PRINT_LINE_BEGIN,
1162306a36Sopenharmony_ci	BINARY_PRINT_ADDR,
1262306a36Sopenharmony_ci	BINARY_PRINT_NUM_DATA,
1362306a36Sopenharmony_ci	BINARY_PRINT_NUM_PAD,
1462306a36Sopenharmony_ci	BINARY_PRINT_SEP,
1562306a36Sopenharmony_ci	BINARY_PRINT_CHAR_DATA,
1662306a36Sopenharmony_ci	BINARY_PRINT_CHAR_PAD,
1762306a36Sopenharmony_ci	BINARY_PRINT_LINE_END,
1862306a36Sopenharmony_ci	BINARY_PRINT_DATA_END,
1962306a36Sopenharmony_ci};
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_citypedef int (*binary__fprintf_t)(enum binary_printer_ops op,
2262306a36Sopenharmony_ci				 unsigned int val, void *extra, FILE *fp);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciint binary__fprintf(unsigned char *data, size_t len,
2562306a36Sopenharmony_ci		    size_t bytes_per_line, binary__fprintf_t printer,
2662306a36Sopenharmony_ci		    void *extra, FILE *fp);
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistatic inline void print_binary(unsigned char *data, size_t len,
2962306a36Sopenharmony_ci				size_t bytes_per_line, binary__fprintf_t printer,
3062306a36Sopenharmony_ci				void *extra)
3162306a36Sopenharmony_ci{
3262306a36Sopenharmony_ci	binary__fprintf(data, len, bytes_per_line, printer, extra, stdout);
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciint is_printable_array(char *p, unsigned int len);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#endif /* PERF_PRINT_BINARY_H */
38