OberonCore
https://forum.oberoncore.ru/

B2: HostFiles.FileList в серверной конфигурации (/use)
https://forum.oberoncore.ru/viewtopic.php?f=116&t=1832
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Пятница, 11 Сентябрь, 2009 11:29 ]
Заголовок сообщения:  B2: HostFiles.FileList в серверной конфигурации (/use)

См. также: viewtopic.php?f=16&t=280

Построение списка файлов для относительного пути A (как реализовано в HostFiles):
- строится список файлов из А относительно вторичного каталога (X)
- этот список дополняется файлами из А относительно первичного каталога (Y), если X не найден или список файлов X получен без ошибок.
- общий результат поиска приравнивается к результатам поиска в Y.

По идее, можно иметь не пустой список файлов и loc.res # 0, говорящий, что этот список, возможно, не полон. Тогда надо:
1) искать файлы в Y не зависимо от результатов поиска в X
2) более корректно выставлять общий результат: если только один из каталогов не существует, то результат выставляется по поиску в существующем. Как выставляется результат, если в обоих каталогах при поиске возникли ошибки (но что-то нашлось), уже не так важно, наверное.

Касательно выделенных граблей --- наступаю второй раз. Первый был давно и решился закомментированием ASSERT(loc.res = 0, 100). Второй, сейчас, был без ASSERT --- выдавал сообщение об ошибке. Полдня убил, чтобы понять: почему при полном пути все ок, а при относительном "location or file not found":
Код:
opath = "w:\work\1"
npath = "w:\work\2"
type = "odc"
res = 0
HostLocator's opath = w:\work\1
HostLocator's npath = w:\work\2

opath = "1"
npath = "2"
type = "odc"
Список файлов 1 не получен: location or file not found
Список файлов 2 не получен: location or file not found
res = -1
HostLocator's opath = W:\work\1
HostLocator's npath = W:\work\2

Автор:  Евгений Темиргалеев [ Пятница, 11 Сентябрь, 2009 11:55 ]
Заголовок сообщения:  Re: HostFiles.FileList и серверный ББ

По выделенному, например, такое исправление:
Код:
   PROCEDURE (d: Directory) FileList* (loc: Files.Locator): Files.FileInfo;
      VAR ...
-->         firstRes: INTEGER;
   BEGIN
      ASSERT(loc # NIL, 20);
      first := NIL; last :=NIL;
      WITH loc: Locator DO
         Append(loc.path, wildcard, wildcard, loc.maxLen, s);
         find := WinApi.FindFirstFileW(s, fd);
         IF find # invalid THEN
...
         ELSE res := WinApi.GetLastError()
         END;
         IF res = noMoreFilesErr THEN res := ok END;
-->         firstRes := res;
         (* check startup directory *)
         IF (loc.rootLen > 0) & ((res = ok) OR (res = fileNotFoundErr) OR (res = pathNotFoundErr)) THEN
            GetShadowDir(loc, s);
...
         END;
-->         IF (res = fileNotFoundErr) OR (res = pathNotFoundErr) THEN res := firstRes END;
         loc.res := Error(res)
      ELSE loc.res := invalidName
      END;
      RETURN first
   END FileList;

Автор:  Иван Горячев [ Понедельник, 14 Сентябрь, 2009 04:28 ]
Заголовок сообщения:  Re: HostFiles.FileList и серверный ББ

Так это, в 1.6 Comm разве такого исправления не лежит? По крайней мере я это исправление года два назад делал

Автор:  Евгений Темиргалеев [ Понедельник, 14 Сентябрь, 2009 09:37 ]
Заголовок сообщения:  Re: HostFiles.FileList и серверный ББ

И правда --- есть :)
Код:
   PROCEDURE MaskFileList (loc : Files.Locator; IN mask : ARRAY OF CHAR) : Files.FileInfo;
...         res1 : INTEGER; (* 28.09.2006   ING *)
...         res1 := res; (* 28.09.2006   ING *)
...         IF res1 = ok THEN res := ok END; (* 28.09.2006   ING *)
   END MaskFileList;

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