Page 1 of 2
Вызов несуществующих функций
Posted: Fri Oct 14, 2016 8:49 pm
by 0CodErr
Сейчас при вызове некоторых системных функций возвращается -1, например,
при попытке вызвать SysFn44
http://websvn.kolibrios.org/filedetails ... c#line-145
undefined_syscall http://websvn.kolibrios.org/filedetails ... #line-5638 вернёт -1.
А некоторые другие возвращают 0, например, при попытке вызвать 68.5, 68.6, 68.7, 68.8, 68.9, 68.10
f68.fail http://websvn.kolibrios.org/filedetails ... #line-1213 вернёт 0.
С чем связано такое различие?
Re: Вызов несуществующих функций
Posted: Fri Oct 14, 2016 10:24 pm
by Serge
Я могу исправить ф68 на -1, если это принципиально.
Re: Вызов несуществующих функций
Posted: Fri Oct 14, 2016 11:25 pm
by 0CodErr
Serge, ну, то есть, должно всё-таки -1 возвращаться?
Я не только про ф68, а вообще, например, SysFn74.5
sys_network.get_drv_name http://websvn.kolibrios.org/filedetails ... c#line-789
Re: Вызов несуществующих функций
Posted: Sat Oct 15, 2016 5:11 am
by Serge
ну, то есть, должно всё-таки -1 возвращаться?
Вот без понятия. Может и есть где-то такое указание, я не знаю.
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 3:19 pm
by 0CodErr
Serge, я просто думаю, может лучше в таких случаях делать всегда просто
вместо, например,
Code: Select all
jmp .fail
;;;;;;;;;;;;;;;;;
.fail:
xor eax, eax
mov [esp+32], eax
ret
Это ведь короче будет, да и код понятнее станет.
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 3:51 pm
by Pathoswithin
Тогда уж лучше сделать deprecated_syscall, который возвращает 0 на случай, если функция ещё где-то используется.
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 4:04 pm
by Ray
deprecated значит, что всё ещё работает как и работало, но имейте ввиду, что это ненадолго, мы даём вам время исправить свой код, который зависит от этой функции, а пока предупреждаем всех о том, что функция устарела. Такое поведение можно реализовать для устаревших функций, которые планируется в последующем удалить, например добавив вывод предупреждения на доску отладки. А те функции, которые уже удалены, тут уж само собой undefined_syscall.
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 7:46 pm
by Pathoswithin
undefined значит, что такой функции никогда не было, и этот номер можно использовать для новой функции не беспокоясь о том, что какая-нибудь старая программа попытается использовать её не по назначению.
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 7:59 pm
by 0CodErr
Pathoswithin wrote:undefined значит, что такой функции никогда не было
Ты ошибаешься, можешь посмотреть в том файлике
http://websvn.kolibrios.org/filedetails ... yscall.incCode: Select all
dd undefined_syscall ; 6-deprecated OpenRamdiskFile
dd undefined_syscall ; 41- deprecated GetIrqOwner
dd undefined_syscall ; 42- deprecated ReadIrqData
dd undefined_syscall ; 44- deprecated ProgramIrqs
dd undefined_syscall ; 45- deprecated ReserveIrq and FreeIrq
dd undefined_syscall ; 52- deprecated Stack driver status
dd undefined_syscall ; 53- deprecated Socket interface
dd undefined_syscall ; 58-deprecated Common file system interface
Re: Вызов несуществующих функций
Posted: Sun Oct 16, 2016 8:29 pm
by Pathoswithin
... и комментарий "deprecated". В любом случае, undefined_syscall не подходит.
Re: Вызов несуществующих функций
Posted: Wed Oct 26, 2016 10:54 pm
by 0CodErr
В
memory.inc:
это возвратит 0, а не -1 как
undefined_syscall.
В
sysfuncs.txt до сих пор осталось
Function 68, subfunction 16 - load driver.
А что MSCOFF драйверы ещё поддерживаются?
Re: Вызов несуществующих функций
Posted: Thu Oct 27, 2016 3:17 pm
by CleverMouse
COFF-драйверы не поддерживаются, но 68.16 работает и даже используется во всех программах со звуком, если не считать звуком PC speaker.
Re: Вызов несуществующих функций
Posted: Thu Oct 27, 2016 11:49 pm
by Serge
И не только со звуком, а в любой программе, работающей непосредственно с драйвером.
Re: Вызов несуществующих функций
Posted: Fri Oct 28, 2016 11:01 am
by 0CodErr
Serge, а в чём тогда принципиальное отличие SysFn68.16 от SysFn68.21?
Судя по документации, в возможности указать "command line".
Re: Вызов несуществующих функций
Posted: Fri Oct 28, 2016 11:40 am
by Serge
Первая возвращает логический номер сервиса по его имени. Вторая явно загружает драйвер и потом возвращает лог.номер.