Changes in common/str.c [45adeeb:1db4e2ae] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • common/str.c

    r45adeeb r1db4e2ae  
    547547
    548548        for (; n > 0 && b[0]; b++, n--) {
     549                if (b[0] < ' ') {
     550                        /* C0 control codes */
     551                        b[0] = replacement;
     552                        count++;
     553                        continue;
     554                }
     555
    549556                int cont = _continuation_bytes(b[0]);
    550557                if (__builtin_expect(cont, 0) == 0)
     
    584591                }
    585592
     593                bool c1_control = (b[0] == 0b11000010 && b[1] < 0b10100000);
     594                if (cont == 1 && c1_control) {
     595                        b[0] = replacement;
     596                        count++;
     597                        continue;
     598                }
     599
    586600                /* 0b1110!!!! 0b10!xxxxx 0b10xxxxxx */
    587601                if (cont == 2 && !(b[0] & 0b00001111) && !(b[1] & 0b00100000)) {
     
    619633}
    620634
     635/** Replaces any byte that's not part of a complete valid UTF-8 character
     636 * encoding with a replacement byte.
     637 * Also replaces C0 and C1 control codes.
     638 */
    621639size_t str_sanitize(char *str, size_t n, uint8_t replacement)
    622640{
Note: See TracChangeset for help on using the changeset viewer.