annotate R/rdyncall/R/dynload.R @ 62:4a9f6c7c09c1 default tip

- fix inccorect overflow errors for int (and long on LLP64 systems)
author Tassilo Philipp
date Sat, 18 May 2024 15:33:54 +0200
parents 0cfcc391201f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 # Package: rdyncall
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 # File: R/dyncall.R
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 # Description: R bindings for dynload library
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 .dynload <- function(libname, auto.unload=TRUE)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 libname <- as.character(libname)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 stopifnot( is.character(libname) )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 libh <- .Call("dynload", libname, PACKAGE="rdyncall")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 if (!is.null(libh)) {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 attr(libh, "path") <- libname
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 attr(libh, "auto.unload") <- auto.unload
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 if (auto.unload) reg.finalizer(libh, .dynunload)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 libh
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 .dynunload <- function(libhandle)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 if (!is.externalptr(libhandle)) stop("libhandle argument must be of type 'externalptr'")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 .Call("dynunload", libhandle, PACKAGE="rdyncall")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 .dynsym <- function(libhandle, symname, protect.lib=TRUE)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 if (!is.externalptr(libhandle)) stop("libh argument must be of type 'externalptr'")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 .Call("dynsym", libhandle, as.character(symname), as.logical(protect.lib), PACKAGE="rdyncall")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30