LINUX.ORG.RU

Напишите велосипедную версию strlen с поддержкой мультибайтных строк при помощи mbrlen и заюзайте в этом коде для правильного подсчёта количества симоволов. Ну и патч в апстрим =).

Deleted
()
Ответ на: комментарий от devl547

>а мне вот придется) gentoo же

Для одноразовой акции можно так:
1. ebuild <filename.ebuild> unpack
2. Идём в /var/tmp/portage/... и правим нужное ручками.
3. ebuild <filename.ebuild> merge (пройдут compile+install+merge)

В результате пакет будет поставлен штатными средствами, но с ручным исправлением. Правда, понятно, при следующем обновлении оно снова обломится :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> А что, готовой в GCC нету? :)

Тогда уж в glibc. ЕМНИП её нет ни в glibc, ни в стандарте POSIX. В MS CRT есть mbslen.

Deleted
()
Ответ на: комментарий от Deleted

>Тогда уж в glibc.

Ну да, это и имелось в виду.

>ЕМНИП её нет ни в glibc, ни в стандарте POSIX

Блин, как же вы живёте-то? :)

...

Там же, для UTF-8 будет фигня полная... Сейчас придумаю...

int utf8_strlen(char *str)
{
  int pos = 0, len = 0;
  while(str[pos])
  {
    if((str[pos] & 0xc0) != 0x80)
        len++;
    pos++;
  }
  return len;
}

Где-то так. Тестировать лень, проверьте сами :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Там же, для UTF-8 будет фигня полная... Сейчас придумаю...

Лучше сделать с помощью mbrlen, которая может сказать сколько байт занимает конкретный символ с учётом текущей локали. Тогда решение не будет зависеть от конкретной кодировки и работать везде.

Deleted
()
Ответ на: комментарий от Deleted

>Лучше сделать с помощью mbrlen

А, я на это посмотрел: «MS CRT есть mbslen»

А чем тогда прямое использование mbrlen не катит?

>конкретный символ с учётом текущей локали


Локали должны умереть :) utf-8 должен победить. И тогда все эти зоопарки сами пропадут.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Локали должны умереть :) utf-8 должен победить. И тогда все эти зоопарки сами пропадут.

Не путай локали и кодировки. Локаль - это не только кодировка, но и формат представления времени, денежных единиц, чисел с плавающей точкой и т.п. Лучше сказать так: "Все неюникодные локали должны умереть" =).

Deleted
()
Ответ на: комментарий от Deleted

>"Все неюникодные локали должны умереть" =).

Да, это и имелось в виду :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.