Cleanup armsrc/string.c and string.h (#964)
[legacy-proxmark3.git] / client / emv / dump.c
blob2368680ad361aee8df641f1a438a82e64bdbce35
1 /*
2 * libopenemv - a library to work with EMV family of smart cards
3 * Copyright (C) 2015 Dmitry Eremin-Solenikov
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
16 #ifdef HAVE_CONFIG_H
17 #include <config.h>
18 #endif
20 #include "dump.h"
21 #include <stdio.h>
22 #include <string.h>
24 #define PRINT_INDENT(level) {for (int i = 0; i < (level); i++) fprintf(f, "\t");}
26 void dump_buffer_simple(const unsigned char *ptr, size_t len, FILE *f)
28 int i;
30 if (!f)
31 f = stdout;
33 for (i = 0; i < len; i ++)
34 fprintf(f, "%s%02hhX", i ? " " : "", ptr[i]);
37 void dump_buffer(const unsigned char *ptr, size_t len, FILE *f, int level)
39 int i, j;
41 if (!f)
42 f = stdout;
44 for (i = 0; i < len; i += 16) {
45 PRINT_INDENT(level);
46 fprintf(f, "\t%02x:", i);
47 for (j = 0; j < 16; j++) {
48 if (i + j < len)
49 fprintf(f, " %02hhx", ptr[i + j]);
50 else
51 fprintf(f, " ");
53 fprintf(f, " |");
54 for (j = 0; j < 16 && i + j < len; j++) {
55 fprintf(f, "%c", (ptr[i+j] >= 0x20 && ptr[i+j] < 0x7f) ? ptr[i+j] : '.' );
57 fprintf(f, "\n");