Bug 98

Summary: Не устанавливаются программы из каталогов с русскими буквами в пути
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: ОбщееAssignee: Роман Дадьков <cunning>
Status: CLOSED WONTFIX QA Contact: Денис Баранов <baraka>
Severity: normal    
Priority: P2 CC: amorozov, baraka
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 42, 234, 6715    

Description Vitaly Lipatov 2006-04-22 17:53:58 MSD
При попытке устанавливать программы (например, 1С) 
из каталога, содержащего русские буквы, установщик не находит свои файлы.
Comment 1 Vitaly Lipatov 2007-02-28 14:33:55 MSK
Предположительно это связано с проблемами с короткими именами.
В установщике 1С используется 16-битный код, который оперирует
только короткими именами файлов. Очевидно, они неверно кодируются
и каталог, названный по-русски, не может может быть найден установщиком.
Comment 2 Анатолий Лютин 2007-03-03 15:07:51 MSK
Перевожу в assigned.
Результаты теста: устанавливал FineReader 7.0 из каталого с названием "Тест" - всё поставилось корректно. Что-то не так делаю?
Comment 3 Анатолий Лютин 2007-03-03 15:37:07 MSK
Ставил 1С и конфигурацию из : /home/vostok/wine_c/Program Files/Тестовый каталог
Всё поставилось, как с моим Вайн так и с Вайн сервера. База ставилась в папку с русским названием. Изголялся как мог. Считаю, что бага в той формулировке, что обозначена не существует. Прошу доказать обратное.

Суммарно было произведено 5 установок из каталога с русским названием.
Comment 4 Анатолий Лютин 2007-03-05 16:49:45 MSK
Синтезировал багу, надо чтобы каталог начинался с буквы "К" (как минимум) - допустим Космос.
Comment 5 Анатолий Лютин 2007-03-07 14:10:25 MSK
Похоже это глобальная проблема в вайн, требуется детальное изучение.
В cmd те же проблемы (имена файлов выдаются в непонятной кодировке).
1с не хочет ставиться т.к. установщику её важно правильное имя каталога, другие программы работаю,т.к. не обращают на это внимание.

Временное решение: Назвать каталог длинным именем (Типа не "Космос", а "КосмосКосмос") - всё работает.
Comment 6 Анатолий Лютин 2007-06-16 17:47:00 MSD
Смотреть read_directory_stat и NtQueryDirectoryFile. Нынешнее предположение - что для длинных имён используется перекодировка в оем с нормальной кодировкой, а короткие не перекадируются.
Comment 7 Анатолий Лютин 2007-06-20 21:52:20 MSD
Установщик 1с использует 16 битные функции. На 19.06.07 стало известно, что такие функции категорически не работаю в wine начиная с 37 версии. Отложено пока не починим/починят.
Comment 8 Vitaly Lipatov 2010-12-26 00:01:36 MSK
*** Bug 6713 has been marked as a duplicate of this bug. ***
Comment 9 Vitaly Lipatov 2010-12-26 00:07:09 MSK
Итак, проблема ещё с нами: http://bugs.etersoft.ru/show_bug.cgi?id=6713#c0

Источник проблемы:
при коротком русском имени в пути (название каталога <=8 символов) всё нормально, но если имя длинное, то для 16-битных функций оно сокращается (как досовское) до вида «Русское имя» -> «РУССК~24» или как-то так. В функциях преобразования есть неуловленная до сих пор ошибка.

Нужно:
- написать программу с использованием 16-битных функций и коротких имён, воспроизводящую проблему.
- исправить существующие тесты на файлы, чтобы они отражали проблему.
- добиться принятия нашего патча в winehq, чтобы проблему закрыть навсегда.
Comment 10 Роман Дадьков 2011-01-18 19:49:15 MSK
А где-нибудь можно посмотреть список 16-битных функций? и почему нельзя обычными написать?
Comment 11 Роман Дадьков 2011-01-18 22:19:58 MSK
после функции RtlGetFullPathName_U возникает предупреждение о некорректном преобразовании, правда пока не понятно, то ли это преобразование из-за которого проблема возникает.
Comment 12 Роман Дадьков 2011-01-19 17:50:04 MSK
 есть какой-нибудь способ определить в каком файле описана функция RtlGetFullPathName_U ?
Comment 13 Александр Морозов 2011-01-19 17:54:58 MSK
>  есть какой-нибудь способ определить в каком файле описана функция
> RtlGetFullPathName_U ?
Можно с помощью Ctrl+1 в kscope
Comment 14 Роман Дадьков 2011-01-20 22:35:32 MSK
написал, функцию, которая ошибку воспроизводит, winedebug сделал, видимо преобразование идет в функциях read_directory_stat и append_entry.
Comment 15 Роман Дадьков 2011-01-21 22:06:49 MSK
Преобразование длинного имени в короткое происходит в функции *append_entry при помощи 
short_len = hash_short_file_name( &str, short_nameW );
в ней используется функция is_invalid_dos_char, которая проверяет допустимость символов. В этой функции допустимыми считаются только латинские символы.
так было:
static inline BOOL is_invalid_dos_char( WCHAR ch )
{
    static const WCHAR invalid_chars[] = { INVALID_DOS_CHARS,'~','.',0 };
    if (ch > 0x7f) [#= сюда добавить =#] return TRUE;
    return strchrW( invalid_chars, ch ) != NULL;
}
так стало:
static inline BOOL is_invalid_dos_char( WCHAR ch )
{
    static const WCHAR invalid_chars[] = { INVALID_DOS_CHARS,'~','.',0 };
    if (ch > 0x7f) 
    	if((ch < 0x0400) || (ch > 0x04ff)) return TRUE;
    return strchrW( invalid_chars, ch ) != NULL;
}
Comment 16 Vitaly Lipatov 2011-01-21 22:28:55 MSK
(В ответ на comment #15)
> Преобразование длинного имени в короткое происходит в функции *append_entry при
> помощи 
> short_len = hash_short_file_name( &str, short_nameW );
...
> так было:
...
> так стало:
Что ты хотел сказать этим?
Возможно, это изменение устраняет проблему?

Ну и проверку с 7f, видимо, стоит стоит заменить на проверку через
WideCharToMultiByte в кодировку CP_OEMCP
Comment 17 Роман Дадьков 2011-01-24 22:18:18 MSK
есть мнение, что в версии 1.0.12 проблема не присутствует
Comment 18 Роман Дадьков 2011-01-25 19:50:54 MSK
1с лежал в папке с вайном просто с разными именами, разные версии вайна реагировали одинаково
WINE@Etersoft version 1.3.9-eter1.6
./wine 1C\:Хронограф\ Школа\ 2.5/1CV77/DISK1/setup.exe - не запускается
./wine длинное\ русское\ имя/1CV77/DISK1/setup.exe - устанавливается

WINE@Etersoft version 1.3.10-eter2.11
./wine 1C\:Хронограф\ Школа\ 2.5/1CV77/DISK1/setup.exe  - не запускается
./wine длинное\ русское\ имя/1CV77/DISK1/setup.exe   - устанавливается
Comment 19 Роман Дадьков 2011-01-25 20:03:48 MSK
видимо проблемы как таковой с длинными русскими именами нет, а есть проблема с двоеточием в имени, причем его использовать, по-видимому можно, но не на всех позициях.
Comment 20 Роман Дадьков 2011-01-25 20:06:53 MSK
проблемы не возникает
Comment 21 Денис Баранов 2011-01-26 16:23:42 MSK
(В ответ на comment #19)
> видимо проблемы как таковой с длинными русскими именами нет, а есть проблема с
> двоеточием в имени, причем его использовать, по-видимому можно, но не на всех
> позициях.

Багу по поводу двоеточия завели? Нужно здесь указать номер.
Comment 22 Роман Дадьков 2011-03-01 21:08:01 MSK
нет, багу не завели. потому что в windows нельзя использовать двоеточие в именах файлов, тогда зачем эту проблему в wine создавать.
Comment 23 Vitaly Lipatov 2011-03-01 22:13:54 MSK
Тогда вопрос закрыт.