summaryrefslogtreecommitdiff
path: root/libguile/foreign.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2010-07-26 19:36:03 +0200
committerLudovic Courtès <ludo@gnu.org>2010-07-26 19:38:52 +0200
commit17fc9efecbc9cb0c7e32664dbd0e2c863194cd7f (patch)
treee03ebbd3ab93aa697aec9abc72444f20edae0a1b /libguile/foreign.c
parentd4149a510e4a87915b625255f4de3301510d810c (diff)
downloadguile-17fc9efecbc9cb0c7e32664dbd0e2c863194cd7f.tar.gz
Add `dereference-pointer' to `(system foreign)'.
* libguile/foreign.c (scm_dereference_pointer): New function. * libguile/foreign.h (scm_dereference_pointer): New declaration. * module/system/foreign.scm (dereference-pointer): Likewise. * test-suite/tests/foreign.test ("foreign<->bytevector")["dereference-pointer"]: New test.
Diffstat (limited to 'libguile/foreign.c')
-rw-r--r--libguile/foreign.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libguile/foreign.c b/libguile/foreign.c
index dc9367614..dd77a823c 100644
--- a/libguile/foreign.c
+++ b/libguile/foreign.c
@@ -162,6 +162,19 @@ SCM_DEFINE (scm_foreign_address, "foreign-address", 1, 0, 0,
}
#undef FUNC_NAME
+SCM_DEFINE (scm_dereference_pointer, "dereference-pointer", 1, 0, 0,
+ (SCM foreign),
+ "Return the a foreign object representing the pointer "
+ "pointed to by @var{foreign}.")
+#define FUNC_NAME s_scm_dereference_pointer
+{
+ SCM_VALIDATE_FOREIGN (1, foreign);
+
+ return scm_take_foreign_pointer (* (void **) SCM_FOREIGN_POINTER (foreign),
+ NULL);
+}
+#undef FUNC_NAME
+
SCM_DEFINE (scm_foreign_to_bytevector, "foreign->bytevector", 2, 2, 0,
(SCM foreign, SCM len, SCM offset, SCM uvec_type),
"Return a bytevector aliasing the memory pointed to by\n"