OberonCore
https://forum.oberoncore.ru/

Linux Console: интерфейс libc.errno
https://forum.oberoncore.ru/viewtopic.php?f=133&t=4105
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Среда, 03 Октябрь, 2012 17:39 ]
Заголовок сообщения:  Linux Console: интерфейс libc.errno

текст перенесён в новое сообщение для упорядочивания по времени: viewtopic.php?p=75277#p75277

Автор:  Евгений Темиргалеев [ Четверг, 04 Октябрь, 2012 17:41 ]
Заголовок сообщения:  Linux Console: интерфейс libc.errno

viewtopic.php?p=75215#p75215
Евгений Темиргалеев писал(а):
1) LinErrno. Данный модуль получился в результате формального перевода заголовка (подробности см. дельту). Математик я. Если имеются убедительные доказательства, что замена errno на функцию есть будущее, а переменная --- отживший век, то без сомнения, лучше от этого лишнего модуля избавиться.

viewtopic.php?p=75216#p75216
Alexander Shiryaev писал(а):
Евгений Темиргалеев писал(а):
1) LinErrno. Данный модуль получился в результате формального перевода заголовка (подробности см. дельту). Математик я. Если имеются убедительные доказательства, что замена errno на функцию есть будущее, а переменная --- отживший век, то без сомнения, лучше от этого лишнего модуля избавиться.

Код:
nm -g /usr/lib/libc.so.6 | grep __errno_location | grep -v ' F '

Linux Fedora Core 4 ("старый" Linux):
Код:
00015520 T __errno_location

Linux Fedora Core 17 ("новый" Linux):
Код:
466a6c00 T __errno_location

Кроме того, errno не всегда работает (даже ести он есть в libc.so.6), а __errno_location всегда (см. здесь и OpenBUGS).

Автор:  Евгений Темиргалеев [ Четверг, 04 Октябрь, 2012 17:42 ]
Заголовок сообщения:  Re: Linux Console: интерфейс libc.errno

Alexander Shiryaev писал(а):
... Кроме того, errno не всегда работает (даже ести он есть в libc.so.6), а __errno_location всегда (см. здесь и OpenBUGS).
Процитированное и отражено в LinErrno: приоритет отдаётся выдаче через __errno_location, если же его нет, то выдаётся переменная errno, адрес которой получается динамически. Для последнего есть тест, который показывает что он отличается от того, который выдаёт система при статическом связывании с библиотекой.

Примеры наличия в двух библиотеках --- эмпирика, которая не есть доказательство. Доказательством бы я счёл заявление какого-либо стратига развития libc, который бы озвучил факт перехода на новое решение (и поддержку старого для обратной совместимости). Или что-то вроде.
Может кто видел?

Короче, вопрос подхода:
1) Для меня, как математика опытное доказательство в голове не воспринимается. Может быть товарищи физики, кои тут однозначно в большинстве, на меня повлияют. :)
2) Нужна ли нам обратная совместимость с древними версиями libc?

Голосуйте, товарищи физики. я же, в своём меньшинстве, воздержусь. :)

Автор:  Евгений Темиргалеев [ Четверг, 04 Октябрь, 2012 17:59 ]
Заголовок сообщения:  Re: Linux Console: интерфейс libc.errno

Для меня вопрос решён: перевод errno.h корректно можно сделать только отдельным, не интерфейсным модулем. Который может учесть специфику конкретной реализации, вариативность которой заложена в документации:
http://www.gnu.org/software/libc/manual ... for-Errors
libc docu писал(а):
Portability Note: ISO C specifies errno as a “modifiable lvalue” rather than as a variable, permitting it to be implemented as a macro. For example, its expansion might involve a function call, like *__errno_location (). In fact, that is what it is on GNU/Linux and GNU/Hurd systems. The GNU C Library, on each system, does whatever is right for the particular system.

There are a few library functions, like sqrt and atan, that return a perfectly legitimate value in case of an error, but also set errno. For these functions, if you want to check to see whether an error occurred, the recommended method is to set errno to zero before calling the function, and then check its value afterward.

Раз запись и чтение аналогично сишному не сделать, значит надо делать по "обероновски":
Код:
MODULE LinErrno...
PROCEDURE Get* (OUT errno: INTEGER)
PROCEDURE Set* (errno: INTEGER)
Полноценный перевод errno.h должен будет содержать и коды ошибок, которые из LinLibc придётся убрать (двойственность не допустима).
libc docu писал(а):
All the error codes have symbolic names; they are macros defined in errno.h.

Автор:  Евгений Темиргалеев [ Четверг, 04 Октябрь, 2012 18:03 ]
Заголовок сообщения:  Re: Linux Console: интерфейс libc.errno

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/