1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to you under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  * https://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14  * implied.  See the License for the specific language governing
15  * permissions and limitations under the License.
16  */
17 
18 #include <ctype.h>
19 #include <string.h>
20 #include "avro_private.h"
21 #include "dump.h"
22 
dump_line(FILE * out,const char * addr,const long len)23 static void dump_line(FILE * out, const char *addr, const long len)
24 {
25 	int i;
26 	fprintf(out, "|");
27 	for (i = 0; i < 16; i++) {
28 		if (i < len) {
29 			fprintf(out, " %02X", ((uint8_t *) addr)[i]);
30 		} else {
31 			fprintf(out, " ..");
32 		}
33 		if (!((i + 1) % 8)) {
34 			fprintf(out, " |");
35 		}
36 	}
37 	fprintf(out, "\t");
38 	for (i = 0; i < 16; i++) {
39 		char c = 0x7f & ((uint8_t *) addr)[i];
40 		if (i < len && isprint(c)) {
41 			fprintf(out, "%c", c);
42 		} else {
43 			fprintf(out, ".");
44 		}
45 	}
46 }
47 
dump(FILE * out,const char * addr,const long len)48 void dump(FILE * out, const char *addr, const long len)
49 {
50 	int i;
51 	for (i = 0; i < len; i += 16) {
52 		dump_line(out, addr + i, (len - i) < 16 ? (len - i) : 16);
53 		fprintf(out, "\n");
54 	}
55 	fflush(out);
56 }
57