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 : }