// This gets a function pointer from a data pointer and avoids some // compiler warnings. DL_FUNC ptr_fn_get(SEXP r_ptr) { #if defined(R_VERSION) && R_VERSION >= R_Version(3, 4, 0) return R_ExternalPtrAddrFn(r_ptr); #else return (DL_FUNC) R_ExternalPtrAddr(r_ptr); #endif }
DL_FUNC R_GetCCallable(const char *package, const char *name) { SEXP penv = get_package_CEntry_table(package); SEXP eptr = findVarInFrame(penv, install(name)); if (eptr == R_UnboundValue) error(_("function '%s' not provided by package '%s'"), name, package); else if (TYPEOF(eptr) != EXTPTRSXP) error(_("table entry must be an external pointer")); return R_ExternalPtrAddrFn(eptr); }