From: Bastian Dehn Date: Sat, 28 Feb 2026 07:51:39 +0000 (+0100) Subject: fix none wide char replace X-Git-Tag: 1.1.4^2~5 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=8bc30e36d41ceb8628b80c70f35fcc3d36e68a6b;p=mv_none_space.git fix none wide char replace --- diff --git a/src/rename.c b/src/rename.c index cd25219..06abf1d 100644 --- a/src/rename.c +++ b/src/rename.c @@ -157,11 +157,18 @@ char* rename_string(const char* src) uint16_t dest_count = 0; size_t length = strlen(src); uint8_t wide_char_len = 0; + uint8_t replaced = 0; for (size_t i = 0; i < length; i++) { wide_char_len = wide_char_length(src[i]); switch (wide_char_len) { case 2: - dest_count += _replace_two_byte_wide_char(src[i + 1], &dest[dest_count]); + replaced = _replace_two_byte_wide_char(src[i + 1], &dest[dest_count]); + if (replaced > 0) { + dest_count += replaced; + } else { + dest[dest_count++] = src[i]; + dest[dest_count++] = src[i + 1]; + } i++; break; default: diff --git a/tests/rename_tests.c b/tests/rename_tests.c index e9d1a68..0fc681b 100644 --- a/tests/rename_tests.c +++ b/tests/rename_tests.c @@ -103,6 +103,18 @@ void rename_scharfes_s() output = NULL; } +void none_replace_wide_char() +{ + const char* none_replace = "ō"; + + char* output = rename_string(none_replace); + + assert_string_equal(output, none_replace); + + free(output); + output = NULL; +} + void rename_lower_case() { const char* input = "Gruß Gott, hat der Biergarten offen?"; @@ -281,6 +293,7 @@ int main() cmocka_unit_test(rename_Oe), cmocka_unit_test(rename_ue), cmocka_unit_test(rename_Ue), + cmocka_unit_test(none_replace_wide_char), cmocka_unit_test(rename_scharfes_s), cmocka_unit_test(rename_lower_case), cmocka_unit_test(rename_point_case),