mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 23:53:55 +08:00
3052ba56bc
We got the sane_ctype.h headers from git and kept using it so far, but since that code originally came from the kernel sources to the git sources, perhaps its better to just use the one in the kernel, so that we can leverage tools/perf/check_headers.sh to be notified when our copy gets out of sync, i.e. when fixes or goodies are added to the code we've copied. This will help with things like tools/lib/string.c where we want to have more things in common with the kernel, such as strim(), skip_spaces(), etc so as to go on removing the things that we have in tools/perf/util/ and instead using the code in the kernel, indirectly and removing things like EXPORT_SYMBOL(), etc, getting notified when fixes and improvements are made to the original code. Hopefully this also should help with reducing the difference of code hosted in tools/ to the one in the kernel proper. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-7k9868l713wqtgo01xxygn12@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#include "print_binary.h"
|
|
#include <linux/log2.h>
|
|
#include <linux/ctype.h>
|
|
|
|
int binary__fprintf(unsigned char *data, size_t len,
|
|
size_t bytes_per_line, binary__fprintf_t printer,
|
|
void *extra, FILE *fp)
|
|
{
|
|
size_t i, j, mask;
|
|
int printed = 0;
|
|
|
|
if (!printer)
|
|
return 0;
|
|
|
|
bytes_per_line = roundup_pow_of_two(bytes_per_line);
|
|
mask = bytes_per_line - 1;
|
|
|
|
printed += printer(BINARY_PRINT_DATA_BEGIN, 0, extra, fp);
|
|
for (i = 0; i < len; i++) {
|
|
if ((i & mask) == 0) {
|
|
printed += printer(BINARY_PRINT_LINE_BEGIN, -1, extra, fp);
|
|
printed += printer(BINARY_PRINT_ADDR, i, extra, fp);
|
|
}
|
|
|
|
printed += printer(BINARY_PRINT_NUM_DATA, data[i], extra, fp);
|
|
|
|
if (((i & mask) == mask) || i == len - 1) {
|
|
for (j = 0; j < mask-(i & mask); j++)
|
|
printed += printer(BINARY_PRINT_NUM_PAD, -1, extra, fp);
|
|
|
|
printer(BINARY_PRINT_SEP, i, extra, fp);
|
|
for (j = i & ~mask; j <= i; j++)
|
|
printed += printer(BINARY_PRINT_CHAR_DATA, data[j], extra, fp);
|
|
for (j = 0; j < mask-(i & mask); j++)
|
|
printed += printer(BINARY_PRINT_CHAR_PAD, i, extra, fp);
|
|
printed += printer(BINARY_PRINT_LINE_END, -1, extra, fp);
|
|
}
|
|
}
|
|
printed += printer(BINARY_PRINT_DATA_END, -1, extra, fp);
|
|
return printed;
|
|
}
|
|
|
|
int is_printable_array(char *p, unsigned int len)
|
|
{
|
|
unsigned int i;
|
|
|
|
if (!p || !len || p[len - 1] != 0)
|
|
return 0;
|
|
|
|
len--;
|
|
|
|
for (i = 0; i < len; i++) {
|
|
if (!isprint(p[i]) && !isspace(p[i]))
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|