Branch data Line data Source code
1 : : /*
2 : : * Copyright (c) 2024 Nordic Semiconductor ASA
3 : : *
4 : : * SPDX-License-Identifier: Apache-2.0
5 : : */
6 : :
7 : :
8 : : #include <stdint.h>
9 : : #include <stdbool.h>
10 : : #include <stddef.h>
11 : : #include <inttypes.h>
12 : : #include <zcbor_common.h>
13 : : #include <zcbor_decode.h>
14 : : #include <zcbor_print.h>
15 : :
16 : :
17 : 0 : void zcbor_print_compare_lines(const uint8_t *str1, const uint8_t *str2, size_t size)
18 : : {
19 [ # # ]: 0 : for (size_t j = 0; j < size; j++) {
20 : 0 : zcbor_do_print("%x ", str1[j]);
21 : : }
22 : 0 : zcbor_do_print("\r\n");
23 [ # # ]: 0 : for (size_t j = 0; j < size; j++) {
24 : 0 : zcbor_do_print("%x ", str2[j]);
25 : : }
26 : 0 : zcbor_do_print("\r\n");
27 [ # # ]: 0 : for (size_t j = 0; j < size; j++) {
28 : 0 : zcbor_do_print("%x ", str1[j] != str2[j]);
29 : : }
30 : 0 : zcbor_do_print("\r\n");
31 : 0 : zcbor_do_print("\r\n");
32 : 0 : }
33 : :
34 : :
35 : 0 : void zcbor_print_compare_strings(const uint8_t *str1, const uint8_t *str2, size_t size)
36 : : {
37 : 0 : const size_t col_width = 16;
38 : :
39 [ # # ]: 0 : for (size_t i = 0; i <= size / col_width; i++) {
40 : 0 : zcbor_do_print("line %zu (char %zu)\r\n", i, i*col_width);
41 : 0 : zcbor_print_compare_lines(&str1[i*col_width], &str2[i*col_width],
42 : 0 : MIN(col_width, (size - i*col_width)));
43 : : }
44 : 0 : zcbor_do_print("\r\n");
45 : 0 : }
46 : :
47 : :
48 : 0 : void zcbor_print_compare_strings_diff(const uint8_t *str1, const uint8_t *str2, size_t size)
49 : : {
50 : 0 : const size_t col_width = 16;
51 : 0 : bool printed = false;
52 : :
53 [ # # ]: 0 : for (size_t i = 0; i <= size / col_width; i++) {
54 [ # # ]: 0 : if (memcmp(&str1[i*col_width], &str2[i*col_width], MIN(col_width, (size - i*col_width))) != 0) {
55 : 0 : zcbor_do_print("line %zu (char %zu)\r\n", i, i*col_width);
56 : 0 : zcbor_print_compare_lines(&str1[i*col_width], &str2[i*col_width],
57 : : MIN(col_width, (size - i*col_width)));
58 : 0 : printed = true;
59 : : }
60 : : }
61 [ # # ]: 0 : if (printed) {
62 : 0 : zcbor_do_print("\r\n");
63 : : }
64 : 0 : }
65 : :
66 : :
67 : 0 : const char *zcbor_error_str(int error)
68 : : {
69 : : #define ZCBOR_ERR_CASE(err) case err: \
70 : : return #err; /* The literal is static per C99 6.4.5 paragraph 5. */\
71 : :
72 [ # # ]: 0 : switch(error) {
73 : : ZCBOR_ERR_CASE(ZCBOR_SUCCESS)
74 : : ZCBOR_ERR_CASE(ZCBOR_ERR_NO_BACKUP_MEM)
75 : : ZCBOR_ERR_CASE(ZCBOR_ERR_NO_BACKUP_ACTIVE)
76 : : ZCBOR_ERR_CASE(ZCBOR_ERR_LOW_ELEM_COUNT)
77 : : ZCBOR_ERR_CASE(ZCBOR_ERR_HIGH_ELEM_COUNT)
78 : : ZCBOR_ERR_CASE(ZCBOR_ERR_INT_SIZE)
79 : : ZCBOR_ERR_CASE(ZCBOR_ERR_FLOAT_SIZE)
80 : : ZCBOR_ERR_CASE(ZCBOR_ERR_ADDITIONAL_INVAL)
81 : : ZCBOR_ERR_CASE(ZCBOR_ERR_NO_PAYLOAD)
82 : : ZCBOR_ERR_CASE(ZCBOR_ERR_PAYLOAD_NOT_CONSUMED)
83 : : ZCBOR_ERR_CASE(ZCBOR_ERR_WRONG_TYPE)
84 : : ZCBOR_ERR_CASE(ZCBOR_ERR_WRONG_VALUE)
85 : : ZCBOR_ERR_CASE(ZCBOR_ERR_WRONG_RANGE)
86 : : ZCBOR_ERR_CASE(ZCBOR_ERR_ITERATIONS)
87 : : ZCBOR_ERR_CASE(ZCBOR_ERR_ASSERTION)
88 : : ZCBOR_ERR_CASE(ZCBOR_ERR_PAYLOAD_OUTDATED)
89 : : ZCBOR_ERR_CASE(ZCBOR_ERR_ELEM_NOT_FOUND)
90 : : ZCBOR_ERR_CASE(ZCBOR_ERR_MAP_MISALIGNED)
91 : : ZCBOR_ERR_CASE(ZCBOR_ERR_ELEMS_NOT_PROCESSED)
92 : : ZCBOR_ERR_CASE(ZCBOR_ERR_NOT_AT_END)
93 : : ZCBOR_ERR_CASE(ZCBOR_ERR_MAP_FLAGS_NOT_AVAILABLE)
94 : : ZCBOR_ERR_CASE(ZCBOR_ERR_INVALID_VALUE_ENCODING)
95 : : ZCBOR_ERR_CASE(ZCBOR_ERR_CONSTANT_STATE_MISSING)
96 : : }
97 : : #undef ZCBOR_ERR_CASE
98 : :
99 : : return "ZCBOR_ERR_UNKNOWN";
100 : : }
101 : :
102 : :
103 : 0 : void zcbor_print_error(int error)
104 : : {
105 : 0 : zcbor_do_print("%s\r\n", zcbor_error_str(error));
106 : 0 : }
|