Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

«Виселица»: правлю баги

Игрушка «Виселица» для «Флиппера Зеро», которую мы как-то написали с дочкой, давно перешла из стадии весёлой разработки в стадию унылой поддержки — пользователи потихоньку находят баги, я правлю. Не самая моя любимая стадия, но один баг повеселил.

Один из пользователей пожаловался, что слова с русской буквой «Р» отображаются иногда как-то неадекватно — крайние буквы как будто «срезаются». Выкинув из словаря всё, кроме слов, начинающихся или кончающихся на эту букву, я и сам убедился в наличии этого странного эффекта.

Проблема оказалось в сочетании того как я кодирую символы русских слов и следующей строки кода:

furi_string_trim(line);

Для экономии места и производительности словарь у меня хранится в кодировке UCS-2 с выкинутыми кодами 0x04, из-за чего русская буква «Р» (с кодом 0x0420) записывается как 0x20, а это код пробела.

Вызов furi_string_trim мне нужен, чтобы срезать перевод строки, после её считывания. Только я не учёл, что срезаются там все пробельные символы, включая урезанную до одного байта букву «Р».

В общем, создал себе проблем на ровном месте. Надо было хранить буквы как есть и не выпендриваться. Впрочем, баг правится просто:

furi_string_trim(line, "\n");