root/tools/perf/util/print_binary.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. binary__fprintf
  2. is_printable_array

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include "print_binary.h"
   3 #include <linux/log2.h>
   4 #include <linux/ctype.h>
   5 
   6 int binary__fprintf(unsigned char *data, size_t len,
   7                     size_t bytes_per_line, binary__fprintf_t printer,
   8                     void *extra, FILE *fp)
   9 {
  10         size_t i, j, mask;
  11         int printed = 0;
  12 
  13         if (!printer)
  14                 return 0;
  15 
  16         bytes_per_line = roundup_pow_of_two(bytes_per_line);
  17         mask = bytes_per_line - 1;
  18 
  19         printed += printer(BINARY_PRINT_DATA_BEGIN, 0, extra, fp);
  20         for (i = 0; i < len; i++) {
  21                 if ((i & mask) == 0) {
  22                         printed += printer(BINARY_PRINT_LINE_BEGIN, -1, extra, fp);
  23                         printed += printer(BINARY_PRINT_ADDR, i, extra, fp);
  24                 }
  25 
  26                 printed += printer(BINARY_PRINT_NUM_DATA, data[i], extra, fp);
  27 
  28                 if (((i & mask) == mask) || i == len - 1) {
  29                         for (j = 0; j < mask-(i & mask); j++)
  30                                 printed += printer(BINARY_PRINT_NUM_PAD, -1, extra, fp);
  31 
  32                         printer(BINARY_PRINT_SEP, i, extra, fp);
  33                         for (j = i & ~mask; j <= i; j++)
  34                                 printed += printer(BINARY_PRINT_CHAR_DATA, data[j], extra, fp);
  35                         for (j = 0; j < mask-(i & mask); j++)
  36                                 printed += printer(BINARY_PRINT_CHAR_PAD, i, extra, fp);
  37                         printed += printer(BINARY_PRINT_LINE_END, -1, extra, fp);
  38                 }
  39         }
  40         printed += printer(BINARY_PRINT_DATA_END, -1, extra, fp);
  41         return printed;
  42 }
  43 
  44 int is_printable_array(char *p, unsigned int len)
  45 {
  46         unsigned int i;
  47 
  48         if (!p || !len || p[len - 1] != 0)
  49                 return 0;
  50 
  51         len--;
  52 
  53         for (i = 0; i < len; i++) {
  54                 if (!isprint(p[i]) && !isspace(p[i]))
  55                         return 0;
  56         }
  57         return 1;
  58 }

/* [<][>][^][v][top][bottom][index][help] */