]> gitweb.hhaalo.de Git - mv_none_space.git/commitdiff
fix none wide char replace
authorBastian Dehn <hhaalo@arcor.de>
Sat, 28 Feb 2026 07:51:39 +0000 (08:51 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 28 Feb 2026 07:52:08 +0000 (08:52 +0100)
src/rename.c
tests/rename_tests.c

index cd25219f563f62b625c3e3c389fe5531812d9382..06abf1d0645d5e4da22fca0eb2068817edd2ce44 100644 (file)
@@ -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:
index e9d1a689534b3bd405bab88d93121a2522f740a0..0fc681b40dca2e51a66ba26451de3ed22e1b0a82 100644 (file)
@@ -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),