Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Jan 21, 2020 11:40 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 236 posts ]  Go to page Previous 1 2 3 4 5 616 Next
Author Message
PostPosted: Wed Nov 23, 2016 9:08 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin
1.MENUET02 заголовок для программ с поддержкой thread local storage.
2.Не надо заголовок. Считать, что путь в программу и текущий каталог передаётся в utf-8, без префиксных байтов.
Если очень нужен префикс, пусть будет два байта /☺ /☻ /♥ для абсолютных путей и один байт для относительных.
3.Есть специальные типы данных и набор функций. Newlib поддерживает utf-8 utf-16 и 26 кодовых таблиц Windows. Всё остальное забота программиста.


Top
   
PostPosted: Wed Nov 23, 2016 9:37 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Кстати, не очень то на ровном месте: http://websvn.kolibrios.org/comp.php?repname=Kolibri+OS&compare[]=%2Fkernel%2Ftrunk%2Ffs@6462&compare[]=%2Fkernel%2Ftrunk%2Ffs@6502

2. Ну вот, другое дело. Префикс нужен, иначе поломаются вообще все программы, которые используют argv[0]. Для utf-16 так не сделаешь, но для utf-8 можно.


Top
   
PostPosted: Wed Nov 23, 2016 10:11 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin
Тогда пусть будет 2 байта для абсолютного пути. Потенциально сломаны все программы слинкованные с newlib или menuetlibc.

Quote:
Не работает пока ваша юникода. см.чат.
Потому, что нарушена совместимость с POSIX и абсолютный путь превратился локальный
Code:
    if (filename[0]=='/')
    {
        strcpy(buf,filename);
    }
    else
    {
        getccwd(buf, 1024);
        buildpath(buf, filename);
    }
 
И это не проблема newlib или menuetlibc.
Не факт, что двухбайтный префикс сильно поможет. С именами типа "☺файляYYYY866.ttt" будут постоянно проблемы. ☺/tmp0/1/222/☺файляYYYY866.ttt валидный путь для файла файляYYYY866.ttt в каталоге /tmp0/1/222 или нет ?
Майкрософт не случайно сделала ASCII и Unicode версии системных функций.


Top
   
PostPosted: Wed Nov 23, 2016 10:25 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Нет, маркер кодировки не является частью строки, это информация о ней, как ВОМ. Сначала маркер, потом строка: ☺/tmp0/1/222/файляYYYY866.ttt. Для cp866 как и раньше можно без маркера.


Top
   
PostPosted: Wed Nov 23, 2016 10:31 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
В результате с именами "♥мой_файл" будут проблемы.
Префикс перед именем - скверная идея.


Top
   
PostPosted: Wed Nov 23, 2016 10:39 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Лучше всего сделать отдельные функции для utf кодировки.
Ещё в копилку
Quote:
gboolean
g_path_is_absolute (const gchar *file_name)
{
g_return_val_if_fail (file_name != NULL, FALSE);

if (G_IS_DIR_SEPARATOR (file_name[0]))
return TRUE;

#ifdef G_OS_WIN32
/* Recognize drive letter on native Windows */
if (g_ascii_isalpha (file_name[0]) &&
file_name[1] == ':' && G_IS_DIR_SEPARATOR (file_name[2]))
return TRUE;
#endif

return FALSE;
}
Это GLib Подобного кода написаны гигабайты. И весь этот код стал несовместим с Колибри.


Top
   
PostPosted: Wed Nov 23, 2016 11:05 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Serge
А зачем префикс перед именем? Откуда такие имена возьмутся?


Top
   
PostPosted: Wed Nov 23, 2016 11:16 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
Pathoswithin wrote:
Serge
А зачем префикс перед именем? Откуда такие имена возьмутся?

Ну например, что должна возвращать команда чтения каталога при унификации.

В общем, надо переделывать, только решить как.
Заодно предлагаю решить проблему рабочего каталога, который ни к чему не привязан.

Можно еще подумать про сетевые диски и относительные пути ../, .../, итп

Например, можно к 70.1, 70,2,... сделать их юникодные версии 70.31, 70.32


Top
   
PostPosted: Wed Nov 23, 2016 11:26 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin wrote:
Serge
А зачем префикс перед именем? Откуда такие имена возьмутся?
Т.е. я не могу прочитать "♥мой_файл" из текущего каталога ? Обязательно полный путь формировать надо ?

Siemargl wrote:
Заодно предлагаю решить проблему рабочего каталога, который ни к чему не привязан.
Что значит не привязан ?


Top
   
PostPosted: Wed Nov 23, 2016 11:39 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
Serge wrote:
Siemargl wrote:
Заодно предлагаю решить проблему рабочего каталога, который ни к чему не привязан.
Что значит не привязан ?

А куда он указывает, на /rd/1 ???

Было бы нормальным, если бы это был рабочий каталог запускаемой программы, указанный явно при запуске или неявно был каталогом запуска программы.

Можно конечно, такую логику делать и руками, просто /rd/1 эквивалентно пустышке.


Top
   
PostPosted: Wed Nov 23, 2016 11:42 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pathoswithin
Если интересует, как обрабатывается Unicode в сишных программах, посмотри GLib. Там все строки хранятся в utf8. Для вызовов WinAPI строки конвертируются из utf8 в utf16. Linux понимает utf8. При этом специальные байты для обозначения кодировки не применяются.


Top
   
PostPosted: Wed Nov 23, 2016 11:44 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Siemargl
Уже много раз обсуждалось. Наследуется от родительского процесса. Как и должно быть. Это не проблема ядра, там с текущим каталогом всё (почти) правильно.


Top
   
PostPosted: Wed Nov 23, 2016 11:57 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
Serge wrote:
Siemargl
Уже много раз обсуждалось. Наследуется от родительского процесса. Как и должно быть. Это не проблема ядра, там с текущим каталогом всё (почти) правильно.

Ок. Я запускаю с рабочего стола еолайт. У него в иконке записан путь /sys/file managers/eolite

Дальше, запускаю из еолайта shell.
И что я вижу в pwd? /rd/1/

Отлично отнаследовалось.
Меняем каталог cwd, запускаем из шелл, например kfm или kfar - Они опять в /rd/1
Получается, что рабочего каталога по умолчанию у программы нет.

Кстати, шрифты действительно накрылись.


Top
   
PostPosted: Thu Nov 24, 2016 12:17 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Siemargl
Всё правильно. Shell расположен в /rd/1. Скопируй shell в /tmp0/1 и запусти оттуда.


Attachments:
1.png
1.png [ 19.44 KiB | Viewed 1644 times ]
Top
   
PostPosted: Thu Nov 24, 2016 12:25 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Меняем каталог cwd, запускаем из шелл, например kfm или kfar - Они опять в /rd/1

На что меняем ? Ты про это:
Kfar и KFM после запуска показывают на левой панели /rd/1/ и /hd0/1/ на правой. Это by design.
Оба кстати меняют текущий каталог при навигации.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 236 posts ]  Go to page Previous 1 2 3 4 5 616 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited