[devel] I: [SOLVED] arepo и glibc-locales

Sergey Vlasov vsu на altlinux.ru
Ср Сен 1 17:50:13 UTC 2010


On Wed, Sep 01, 2010 at 05:40:58PM +0400, Alexey I. Froloff wrote:
> On Wed, Sep 01, 2010 at 05:34:17PM +0400, Sergey Vlasov wrote:
> > Зависят как минимум от порядка байтов, поэтому в %datadir их всё-таки
> > класть нельзя.
> gettext(3) умеет определять порядок байтов в .mo файлах (поэтому
> они лежат в %_datadir).  А что с остальными локалечастями?

Там всё читается напрямую: заголовок рассматривается как struct с
массивом неопределённой длины в конце, из этого массива берутся
смещения отдельных элементов (строк, массивов с данными, ...) и
преобразуются в указатели, которые рассовываются по внутренним
массивам.  Причём часть этих элементов на самом деле является тоже
массивами из int16_t или int32_t, для которых тоже не выполняются
никакие преобразования.

http://git.altlinux.org/gears/g/glibc.git?p=glibc.git;a=blob;f=locale/loadlocale.c;h=b91941eae95bdec33a669c72639647254f3eb0b5;hb=HEAD#l64

(там ещё в конце специальный случай - тип word, для него значение типа
uint32_t тоже вытаскивается напрямую).

Причём когда-то давно о совместимости с другим порядком байтов там
заботились - судя по ChangeLog.10, этот код выбросили 1999-09-13,
тогда же и перенесли localedir из datadir в libdir.  Чуть позже
(2000-01-31) для sparc64 перенесли файлы в $exec_prefix/lib/locale с
целью использования одной копии для 32-битной и 64-битной библиотеки
(так что совместимость 32/64 там должна поддерживаться).  Сейчас то же
самое по умолчанию делается и для x86_64.

Получается, что на x86_64 сейчас файлы glibc-locales зря лежат в
/usr/lib64/locale - их место в /usr/lib/locale.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: Digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100901/a4177f29/attachment.bin>


Подробная информация о списке рассылки Devel