Bug 7412

Summary: mkisofs не работает в локали ru_RU.UTF-8
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: mkisofsAssignee: Konstantin A Lepikhov (L.A. Kostis) <lakostis>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P5 CC: lakostis, lav
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 7079, 7371    
Attachments:
Description Flags
Обновлённый патч для natspec none

Description Anton Farygin 2005-07-21 15:02:13 MSD
Вот вывод от k3b:
Devices
-----------------------
_NEC DVD_RW ND-3520A 1.04 (/dev/cdroms/cdwriter0, ) at /media/cdrom [CD-R;
CD-RW; CD-ROM; DVD-ROM; DVD-R; DVD-RW; DVD+R; DVD+RW] [DVD-ROM; Продолжение
DVD-R; Ограниченная перезапись DVD-RW; DVD-RW с продолжением; DVD+RW; DVD+R;
DVD+R Double Layer; CD-ROM; CD-R; CD-RW] [SAO; TAO; RAW; RAW/R96R]

System
-----------------------
K3b Version: 0.11.24
KDE Version: 3.4.1
QT Version:  3.3.4
Kernel:      2.6.12-std26-up-alt1

mkisofs
-----------------------
Unknown charset
Known charsets are:
cp10081
cp10079
cp10029
cp10007
cp10006
cp10000
koi8-u
koi8-r
cp1251
cp1250
cp874
cp869
cp866
cp865
cp864
cp863
cp862
cp861
cp860
cp857
cp855
cp852
cp850
cp775
cp737
cp437
iso8859-15
iso8859-14
iso8859-9
iso8859-8
iso8859-7
iso8859-6
iso8859-5
iso8859-4
iso8859-3
iso8859-2
iso8859-1


Предлагаю оторвать чего-нить автору natspec

Говорят что natspec крив по определению, смотрит не на те переменные, не туда и
не в том месте.
Comment 1 Vitaly Lipatov 2005-07-21 15:06:38 MSD
мало ли что говорят, я вот не вижу в списке допустимых кодировок utf8. 
Приведите пример командной строки с явным указанием utf8-кодировки для 
mkisofs, который работает. 
Comment 2 Anton Farygin 2005-07-21 15:16:17 MSD
про переменные:

согласно коду natspec:
tmp = getenv ("LANGUAGE"); - LANGUAGE для опеределения кодировок - это труба.
Нужно смотреть на LANG


natspec_get_system_locale() - get_from_system_i18n("LANG"); - это конечно все
правильно, но зачем тогда брать пользовательскую LANGUAGE, где черт знает что
может быть написано ?
Comment 3 Vitaly Lipatov 2005-07-21 15:47:21 MSD
1. Тестируется след. версия natspec, где анализ LANGUAGE убран, поскольку он 
относится только к выводу сообщения. 
 
2. 
Вот весь патч к mkisofs, который был: 
+#ifdef HAVE_NATSPEC 
+       nls = load_nls(natspec_get_filename_encoding("")); 
+#else 
        nls = load_nls("iso8859-1"); 
+#endif 
То есть влияет только на кодировку по умолчанию. Если iso8859-1 в UTF системе 
незаметно подменяется на utf8 где-то дальше, то это бага mkisofs, я готов 
помочь с поиском/исправлением. 
 
Судя по ругани k3b, которая приведена в баге, mkisofs вызывается с явно 
указанной кодировкой. 
 
Хотелось бы видеть,  
1) что k3b выводит в консоль про запуск mkisofs при попытке создания образа 
2) Если есть вопросы к natspec, то что говорит в локали UTF8 
$ natspec -fv 
 
Comment 4 Anton Farygin 2005-07-21 15:58:51 MSD
$ natspec -fv 
System locale: ru_RU.UTF-8
Filename encoding in iconv/nls form: utf8


При этом явно сказано, что mkisofs не поддерживает utf8.

Т.е. - для него не надо заводить такую перекодировку.

Т.е. - в этом случае:
+#ifdef HAVE_NATSPEC 
+       nls = load_nls(natspec_get_filename_encoding("")); 
+#else 
        nls = load_nls("iso8859-1"); 
+#endif 

nls получается равным utf8, которого нет в списке, в итоге вылетает ошибка
Тут нужно или убирать natspec вообще, или делать проверку на наличие полученной
кодировки в списке поддерживаемых mkisofs'ом.
Comment 5 Vitaly Lipatov 2005-07-21 16:16:07 MSD
Предлагается применить патч, чтобы mkisofs узнал что такое utf8: 
 
--- nls_base.c.o    2001-01-21 00:18:33 +0300 
+++ libunls/nls_base.c  2005-07-21 16:08:48 +0400 
@@ -113,6 +113,8 @@ 
    int ret; 
 #endif 
 
+   if (!strcmp(charset,"utf8")) 
+       charset = "iso8859-1"; 
    nls = find_nls(charset); 
    if (nls) { 
        nls->inc_use_count(); 
Comment 6 Sergey V Turchin 2005-07-21 17:20:03 MSD
(In reply to comment #5) 
> +   if (!strcmp(charset,"utf8"))  
> +       charset = "iso8859-1";  
Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не нужен :-( 
Comment 7 Vitaly Lipatov 2005-07-21 17:23:28 MSD
(In reply to comment #6) 
> (In reply to comment #5)  
> > +   if (!strcmp(charset,"utf8"))   
> > +       charset = "iso8859-1";   
> Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не 
нужен :-(  
По умолчанию будет utf8 
 
Comment 8 Michael Shigorin 2005-07-21 17:58:15 MSD
> Предлагаю оторвать чего-нить автору natspec
Человек решает проблемы.  А то, что новые вылазят на последних стадиях
тестирования -- проблема организации оного тестирования.

Предлагаю одуматься.
Comment 9 Vitaly Lipatov 2005-07-22 01:52:30 MSD
Created attachment 1010 [details]
Обновлённый патч для natspec

Я добавил распознавание utf8 к основному патчу, пакет нужно просто пересобрать
с новым патчем. На всякий случай выложил пакеты с исправленными исходным
пакетом и бинарниками на ftp://ftp.altlinux.ru/pub/people/lav/cdrtools
Comment 10 Konstantin A Lepikhov (L.A. Kostis) 2005-08-03 20:04:25 MSD
Кто-нить проверял сборки, которые выложил Виталий? Собственно, я могу просто
пересобрать cdrtools с новым libnatspec, т.к. уникодного окружения у меня нет. 
Comment 11 Anton Farygin 2005-08-04 11:51:41 MSD
пересобери, плз.
Comment 12 Anton Farygin 2005-08-04 12:22:38 MSD
Кстати, насколько я понял - пересобирать надо с новым патчем, а не с новым
libnatspec.
Comment 13 Roman Medyakov 2005-08-04 14:05:42 MSD
Проверил сборки Виталия - вроде всё работает.
Comment 14 Konstantin A Lepikhov (L.A. Kostis) 2005-09-07 00:43:46 MSD
раз ничего не сломалось, закрываю.