Показать файл/папку назначения Symlink и Junction на панелях

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 12463
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by John Doe » Thu 08 Aug, 2019 14:39

Latest post of the previous page:

Разумеется.
Хотя конкретно папки Onedrive у меня нет, чтобы удостовериться)

buniak_a_h
Posts: 1136
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 49 times
Contact:

Показать файл/папку назначения Symlink и Junction на панелях

Post by buniak_a_h » Wed 04 Sep, 2019 22:15

John Doe wrote:
Thu 03 Sep, 2015 21:21
Приложенный микро-плагин решает задачу.
Попробовал "прикрутить" к этому микро-плагину вычисление CRC (через вызов функции плагина Integrity Checker)


Получаю следующий вылет:

Code: Select all

  ╔═══════════════════════════ Exception occurred ═══════════════════════════╗
  ║ Exception:   0xC00000FD - EXCEPTION_STACK_OVERFLOW                       ║
  ║ Details:     Не удается создать новую страницу защиты для стека.         ║
  ║ errno:                                                                   ║
  ║ LastError:                                                               ║
  ║ NTSTATUS:                                                                ║
  ║ Address:     0x7FFBA0094697 - ntdll.dll!_chkstk                          ║
  ║ Source:                                                                  ║
  ║ Function:    GetContentDataW                                             ║
  ║ Module:      C:\Program Files\Far Manager\Plugins\c0link\c0link-x64.dll  ║
  ╟──────────────────────────────────────────────────────────────────────────╢
  ║           { Unload plugin } [ Stack ] [ Minidump ] [ Ignore ]            ║
  ╚══════════════════════════════════════════════════════════════════════════╝
  
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?

Shmuel
Posts: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by Shmuel » Thu 05 Sep, 2019 01:59

buniak_a_h wrote:
Wed 04 Sep, 2019 22:15
Это я что-то неправильно сделал, или вызов функции плагина из другого плагина не предусмотрен? Или какая-то другая причина?
Фар при выводе меседж-бокса вызывает GetContentData повторно и происходит переполнение стека.
Ваша ошибка в том, что не проверяете значение возврата плагина.
Я сделал заплатку в "generic plugin", и таким образом все вновь собираемые LuaFAR-плагины будут от этого защищены.
Last edited by Shmuel on Thu 05 Sep, 2019 02:08, edited 1 time in total.

buniak_a_h
Posts: 1136
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 49 times
Contact:

Показать файл/папку назначения Symlink и Junction на панелях

Post by buniak_a_h » Thu 05 Sep, 2019 04:51

Shmuel wrote:
Thu 05 Sep, 2019 01:59
вновь собираемые LuaFAR-плагины будут от этого защищены
Вот за это спасибо. Хотя я почти ничего не понял.
1. "Меседж-бокс" я, вроде, не вывожу. Если имеется в виду сообщение об ошибке - то ошиба-то уже случилась? Или что-то другое?
2. Какое значение возврата плагина я не проверяю? «Plugin.SyncCall(<...> 'CRC32', FilePath)»? Добавил проверку на type(...) - не помогло.
--
Ну и главное. За приведённым выше мессадж-боксом я не увидел первичного. Вот он:

Code: Select all

╔═══════════════════════════════════════════════════════════════ Error ════════════════════════════════════════════════════════════════╗
║ C:\Program Files\Far Manager\Plugins\c0link\c0link-x64.dll:                                                                          ║
║ C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:20: attempt to index global 'Plugin' (a nil value)                            ║
║ stack traceback:                                                                                                                     ║
║    C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:20: in function <C:\Program Files\Far Manager\Plugins\c0link\c0link.lua:7> ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║                                                                { OK }                                                                ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
И я не понял, как «global 'Plugin'» может быть nil-ом.

buniak_a_h
Posts: 1136
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 49 times
Contact:

Показать файл/папку назначения Symlink и Junction на панелях

Post by buniak_a_h » Thu 05 Sep, 2019 04:58

Shmuel, вдогонку.
Для проверки заменил на crc=type(_G.Plugin), crc=type(_G.mf) - все они возращают nil. Как будто какие-то проблемы с видимостью глобальных таблиц... А вот crc=type(_G.win) возвращает table... Логики не поймаю... :-(
Last edited by buniak_a_h on Thu 05 Sep, 2019 05:11, edited 2 times in total.

User avatar
John Doe
Бюрократ
Posts: 12463
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by John Doe » Thu 05 Sep, 2019 06:11

Вам не нужен плагин. Установите скрипт в scripts.

Shmuel
Posts: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by Shmuel » Thu 05 Sep, 2019 07:41

Shmuel wrote:
Thu 05 Sep, 2019 01:59
Ваша ошибка в том, что не проверяете значение возврата плагина.
Вот код, который проверяет:

Code: Select all

local crc=Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'CRC32', FilePath)
data[j] = crc and crc:upper()

buniak_a_h
Posts: 1136
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 49 times
Contact:

Показать файл/папку назначения Symlink и Junction на панелях

Post by buniak_a_h » Thu 05 Sep, 2019 09:20

Shmuel wrote:
Thu 05 Sep, 2019 07:41
от код, который проверяет:
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.

buniak_a_h
Posts: 1136
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 82 times
Been thanked: 49 times
Contact:

Показать файл/папку назначения Symlink и Junction на панелях

Post by buniak_a_h » Thu 05 Sep, 2019 09:22

John Doe, спасибо. Я не понял, как это должно работать... Теперь работает

User avatar
John Doe
Бюрократ
Posts: 12463
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 198 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by John Doe » Thu 05 Sep, 2019 09:27

А что тут понимать.
Таблицы, названия которых начинаются с заглавных букв, присутствуют только в LuaMacro.
Бесполезно искать их в любом другом luafar-плагине.

Shmuel
Posts: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

Показать файл/папку назначения Symlink и Junction на панелях

Post by Shmuel » Thu 05 Sep, 2019 10:38

buniak_a_h wrote:
Thu 05 Sep, 2019 09:20
1. Это не помогает.
2. Вылетит (вылетает), т.к. таблицы Plugin нету.
О да, я этого не видел, так как проверял на LuaMacro, а не на плагине из этой темы.
Но и на LuaMacro вылетало, и причина была в отсутствии проверки значения, возвращаемого плагином.

Post Reply

Return to “Нужна помощь”