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   undefined_syscall
вместо, например,

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.inc

Code: 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:

Code: Select all

dd f68.fail ; moved to f68.24

Code: Select all

dd f68.fail ; moved to f68.25
это возвратит 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
Первая возвращает логический номер сервиса по его имени. Вторая явно загружает драйвер и потом возвращает лог.номер.