Bug 7412 - mkisofs не работает в локали ru_RU.UTF-8
: mkisofs не работает в локали ru_RU.UTF-8
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/mkisofs)
: unstable
: all Linux
: P5 blocker
Assigned To:
:
:
:
:
: 7079 7371
  Show dependency tree
 
Reported: 2005-07-21 15:02 by
Modified: 2007-10-23 15:17 (History)


Attachments
Обновлённый патч для natspec (3.36 KB, patch)
2005-07-22 01:52, Vitaly Lipatov
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2005-07-21 15:02:13
Вот вывод от 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 From 2005-07-21 15:06:38 -------
мало ли что говорят, я вот не вижу в списке допустимых кодировок utf8. 
Приведите пример командной строки с явным указанием utf8-кодировки для 
mkisofs, который работает. 
------- Comment #2 From 2005-07-21 15:16:17 -------
про переменные:

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


natspec_get_system_locale() - get_from_system_i18n("LANG"); - это конечно все
правильно, но зачем тогда брать пользовательскую LANGUAGE, где черт знает что
может быть написано ?
------- Comment #3 From 2005-07-21 15:47:21 -------
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 From 2005-07-21 15:58:51 -------
$ 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 From 2005-07-21 16:16:07 -------
Предлагается применить патч, чтобы 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 From 2005-07-21 17:20:03 -------
(In reply to comment #5) 
> +   if (!strcmp(charset,"utf8"))  
> +       charset = "iso8859-1";  
Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не нужен :-( 
------- Comment #7 From 2005-07-21 17:23:28 -------
(In reply to comment #6) 
> (In reply to comment #5)  
> > +   if (!strcmp(charset,"utf8"))   
> > +       charset = "iso8859-1";   
> Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не 
нужен :-(  
По умолчанию будет utf8 
 
------- Comment #8 From 2005-07-21 17:58:15 -------
> Предлагаю оторвать чего-нить автору natspec
Человек решает проблемы.  А то, что новые вылазят на последних стадиях
тестирования -- проблема организации оного тестирования.

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

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