theonlymirage писал(а):
Конечно далёк от фэншуя, но зачем объявлять и выделять память в начале main:
Код:
dword devbuf;
...
devbuf = malloc(10000);
если devbuf используется только внутри switch за словом default:
Код:
ReadDir(19, devbuf, "/");
?
Ну дык автор — дизайнер, а не программист, конкретно приведённый код — это ещё не так плохо
theonlymirage писал(а):
Комментарии, что хотели сделать обновлением, их нет. Лучше, чтобы появились.
Коммит в SVN "fix5" очень подробно раскрывает суть исправления (собственно никак не раскрывает).
Если devbuf используется где-то ещё, то может сделать его глобальной переменной, а если нет - то следует поместить его внутрь default, чтобы при выполнении main'а память не отжирал. С другой стороны, если буфер непрерывно используется в цикле (то чтобы не выделять постоянно память, объявлено нормально), но тогда почему он попал в default?
Насколько можно судить по коду\форуму\чату\svn автор делает по принципу: работает, да и ладно; а если не работает — ну не судьба, значит.
theonlymirage писал(а):
При быстром просмотре ещё вопрос по системной функции ReadDir(): какая это конкретно функция ядра? Где она объявлена или это часть языка С-- (в доках языка не нашёл)? Собственно в каком файле об этой обёртке найти/почитать? Функция нигде в Eolite больше не используется, нужно больше уверенности в её корректном применении.
theonlymirage, ИМХО, это не тот код, который следует изучать. Во многом это примеры того, как НЕ надо делать.
Если же интересует функция чтения папки, обёртки и примеры, то вот есть в теме
Delphi7 examplesтакой пример
viewtopic.php?f=33&t=3469#p68896возможно, полезен будет ещё и этот пример
viewtopic.php?f=33&t=3469#p69401Объявления функций находятся в файле
KolibriOS.pas и перед каждой из них указан номер вызываемой системной функции, например:
Код:
{70.0} Function ReadFile(Path: PChar; Var Buffer; Count, LoPos, HiPos: Cardinal; Var BytesRead: Dword): Integer; StdCall; External 'KolibriOS';
{70.1} Function ReadFolder(Path: PChar; Var Buffer; Count, Start, Flags: Cardinal; Var BlocksRead: Dword): Integer; StdCall; External 'KolibriOS';
{70.2} Function CreateFile(Path: PChar): Integer; StdCall; External 'KolibriOS';
{70.3} Function WriteFile(Path: PChar; Const Buffer; Count, LoPos, HiPos: Cardinal; Var BytesWritten: Dword): Integer; StdCall; External 'KolibriOS';
{70.4} Function ResizeFile(Path: PChar; LoSize, HiSize: Cardinal): Integer; StdCall; External 'KolibriOS';
{70.5} Function GetFileAttributes(Path: PChar; Var Buffer: TFileAttributes): Integer; StdCall; External 'KolibriOS';
{70.6} Function SetFileAttributes(Path: PChar; Var Buffer: TFileAttributes): Integer; StdCall; External 'KolibriOS';
{70.7} Function RunFile(Path, CmdLine: PChar): Integer; StdCall; External 'KolibriOS';
{70.7} Function DebugFile(Path, CmdLine: PChar): Integer; StdCall; External 'KolibriOS';
{70.8} Function DeleteFile(Path: PChar): Integer; StdCall; External 'KolibriOS';
{70.9} Function CreateFolder(Path: PChar): Integer; StdCall; External 'KolibriOS';
Изначально, кстати, всё было в одном файле, вот в этом сообщении
viewtopic.php?f=33&t=735&p=68255#p68255 есть ссылки.