From 194a30e6c5707cab3b07c092f0f735255d6e13b0 Mon Sep 17 00:00:00 2001 From: gitlost Date: Tue, 28 Apr 2020 13:45:36 +0100 Subject: [PATCH] AZTEC #190 count only B-1 bits; #191 suppress valgrind, clang-tidy warnings --- backend/aztec.c | 59 +++++++++++++++++++------------------- backend/tests/test_aztec.c | 35 ++++++++++++++++------ 2 files changed, 55 insertions(+), 39 deletions(-) diff --git a/backend/aztec.c b/backend/aztec.c index c57c39df..f5e88bd2 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -249,7 +249,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len // Reduce two letter combinations to one codeword marked as [abcd] in Punct mode i = 0; j = 0; - do { + while (i < (int) src_len) { if ((source[i] == 13) && (source[i + 1] == 10)) { // CR LF reduced_source[j] = 'a'; reduced_encode_mode[j] = encode_mode[i]; @@ -272,7 +272,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len i++; } j++; - } while (i < (int) src_len); + } reduced_length = j; @@ -449,7 +449,7 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len if (reduced_encode_mode[i] != current_mode) { - for (count = 0; ((i + count) <= reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++); + for (count = 0; ((i + count) < reduced_length) && (reduced_encode_mode[i + count] == reduced_encode_mode[i]); count++); next_mode = get_next_mode(reduced_encode_mode, reduced_length, i); if (reduced_encode_mode[i] == 'P') { @@ -1125,30 +1125,31 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz j = 0; count = 0; for (i = 0; i < data_length; i++) { - adjusted_string[j] = binary_string[i]; - j++; - - if (binary_string[i] == '1') { - count++; - } - + if ((j + 1) % codeword_size == 0) { // Last bit of codeword + /* 7.3.1.2 "whenever the first B-1 bits ... are all “0”s, then a dummy “1” is inserted..." + * "Similarly a message codeword that starts with B-1 “1”s has a dummy “0” inserted..." */ if (count == (codeword_size - 1)) { - // Codeword of all '1's + // Codeword of B-1 '1's adjusted_string[j] = '0'; j++; } - + if (count == 0) { - // Codeword of all '0's + // Codeword of B-1 '0's adjusted_string[j] = '1'; j++; } - + count = 0; + } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */ + count++; } + + adjusted_string[j] = binary_string[i]; + j++; } adjusted_string[j] = '\0'; adjusted_length = j; @@ -1177,17 +1178,16 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz adjusted_string[adjusted_length - 1] = '0'; } -/* if (debug) { printf("Codewords:\n"); for (i = 0; i < (adjusted_length / codeword_size); i++) { for (j = 0; j < codeword_size; j++) { printf("%c", adjusted_string[(i * codeword_size) + j]); } - printf("\n"); + printf(" "); } + printf("\n"); } -*/ } while (adjusted_length > data_maxsize); /* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s @@ -1228,34 +1228,32 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz j = 0; count = 0; for (i = 0; i < data_length; i++) { - adjusted_string[j] = binary_string[i]; - j++; - - if (binary_string[i] == '1') { - count++; - } - + if ((j + 1) % codeword_size == 0) { // Last bit of codeword if (count == (codeword_size - 1)) { - // Codeword of all '1's + // Codeword of B-1 '1's adjusted_string[j] = '0'; j++; } - + if (count == 0) { - // Codeword of all '0's + // Codeword of B-1 '0's adjusted_string[j] = '1'; j++; } - + count = 0; + } else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */ + count++; } + + adjusted_string[j] = binary_string[i]; + j++; } adjusted_string[j] = '\0'; adjusted_length = j; - adjustment_size = adjusted_length - data_length; remainder = adjusted_length % codeword_size; @@ -1297,8 +1295,9 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz for (j = 0; j < codeword_size; j++) { printf("%c", adjusted_string[(i * codeword_size) + j]); } - printf("\n"); + printf(" "); } + printf("\n"); } } diff --git a/backend/tests/test_aztec.c b/backend/tests/test_aztec.c index 54fb4ac2..9f30938b 100644 --- a/backend/tests/test_aztec.c +++ b/backend/tests/test_aztec.c @@ -129,7 +129,24 @@ static void test_encode(void) "011000011011010" "111001101100000" }, - /* 3*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (left) TODO: investigate", + /* 3*/ { BARCODE_AZTEC, UNICODE_MODE, -1, 1, "Code 2D!", 0, 15, 15, "ISO/IEC 24778:2008 Figure G.2; specify size", + "000110001100000" + "000000110000010" + "101100001000101" + "011111111111100" + "111100000001101" + "000101111101100" + "100101000101111" + "001101010101001" + "001101000101010" + "010101111101001" + "100100000001011" + "100111111111101" + "010001100010010" + "011000011011010" + "111001101100000" + }, + /* 4*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (left) TODO: investigate", "00010101011010101010101010110101010101010110101010101" "00101010100101010101010101001010101010101001010101010" "11100101011010101010101010110101010101010110101010110" @@ -184,7 +201,7 @@ static void test_encode(void) "01010101010010101010101010010101010101010100101010110" "10101010101101010101010101101010101010101011010101001" }, - /* 4*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (right) TODO: investigate", + /* 5*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (right) TODO: investigate", "00111111111111111111111111111111111111111111111111111" "00000000000000000000000000000000000000000000000000000" "11101111111111111111111111111111111111111111111111101" @@ -239,7 +256,7 @@ static void test_encode(void) "00000000000000000000000000000000000000000000000000001" "11111111111111111111111111111111111111111111111111101" }, - /* 5*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", 0, 23, 23, "#189 Follow embedded FLG(n) with FLG(0)", + /* 6*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", 0, 23, 23, "#189 Follow embedded FLG(n) with FLG(0)", "00100000101111000100100" "00011101100110001010000" "00000111000111101011011" @@ -264,7 +281,7 @@ static void test_encode(void) "00010001010101010101011" "11101100000000000010110" }, - /* 6*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]95012345678903[3103]000123", 0, 19, 19, "#189 Follow embedded FLG(n) with FLG(0)", + /* 7*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]95012345678903[3103]000123", 0, 19, 19, "#189 Follow embedded FLG(n) with FLG(0)", "0000000100001010101" "0001101111011000000" "0111100100010110100" @@ -285,7 +302,7 @@ static void test_encode(void) "1000110111011000101" "1010100000101101001" }, - /* 7*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]04610044273252[21]LRFX)k