Вызов исходной функции после подстройки аргументов является неправильным использованием R-API?

Я пытаюсь создать небольшое расширение для R здесь для встраивания текущего времени в приглашение R: https://github.com/musically-ut/extPrompt

Вещи, кажется, работают в целом, но R CMD check . поднял предупреждение:

Файл '[усеченный].. Rcheck / extPrompt / libs / extPrompt.so': Обнаружен не API-вызов R: 'ptr_R_ReadConsole'

Скомпилированный код не должен вызывать точки входа без API в R.

Соответствующий файл выглядит так: https://github.com/musically-ut/extPrompt/blob/master/src/extPrompt.c и находится в строке 38, я думаю.

void extPrompt() {
    // Initialize the plugin by replacing the R_ReadConsole function

    old_R_ReadConsole = ptr_R_ReadConsole;
    ptr_R_ReadConsole = extPrompt_ReadConsole;

    // ...
}

int extPrompt_ReadConsole(const char *old_prompt, unsigned char *buf, int len,
         int addtohistory) {

    // ...

    // Call the old function with the `new_prompt`
    return (*old_R_ReadConsole)(new_prompt, buf, len, addtohistory);
}

Я пытаюсь сделать R_ReadConsole Вызов API. Тем не менее, поскольку другой плагин (например, мой) мог уже переопределить его, я не хочу напрямую вызывать R_ReadConsole но функция, которая ранее была в ptr_R_ReadConsole,

Это неправильное использование API?

1 ответ

Решение

Из списка рассылки r-devel:

Что касается некорректного использования API - да. Поскольку проверка CMD R говорит вам, что это проблема, это официально проблема. Это не имеет значения, если пакет работает для вас и всех его пользователей, и пакет не должен быть размещен на CRAN. Однако использование этого символа в вашем коде может работать не на всех платформах, и не гарантируется, что оно будет работать в будущем (но, вероятно, будет!).

Другие вопросы по тегам