1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-24 12:20:20 +02:00

Add more foreign object interfaces

* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_make_foreign_object_1)
  (scm_make_foreign_object_2, scm_make_foreign_object_3)
  (scm_make_foreign_object_n): Change to take void * arguments, and to
  add a comment to the header indicating that these are convenience
  constructors.

* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_unsigned_ref)
  (scm_foreign_object_unsigned_set_x): New functions, equivalent to the
  old scm_foreign_object_ref and scm_foreign_object_set_x.

* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_signed_ref)
  (scm_foreign_object_signed_set_x): New functions taking
  scm_t_signed_bits.

* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_ref)
  (scm_foreign_object_set_x): New functions that take void*.
This commit is contained in:
Andy Wingo 2014-04-28 11:27:31 +02:00
parent 682a55d59b
commit 4b8ce7c752
3 changed files with 62 additions and 23 deletions

View file

@ -38,8 +38,7 @@ enum
static void
finalizer (SCM obj)
{
scm_t_bits addr = scm_foreign_object_ref (obj, CSTR_SLOT_ADDR);
free ((void *) addr);
free (scm_foreign_object_ref (obj, CSTR_SLOT_ADDR));
}
static SCM
@ -50,7 +49,7 @@ make_cstr_from_static (SCM type, const char *str)
if (!ours)
abort ();
return scm_make_foreign_object_2 (type, (scm_t_bits) ours, strlen (ours));
return scm_make_foreign_object_2 (type, ours, (void *) strlen (ours));
}
static int
@ -59,8 +58,8 @@ cstr_equals_static_p (SCM cstr, const char *str)
const char *addr;
size_t len;
addr = (const char *) scm_foreign_object_ref (cstr, CSTR_SLOT_ADDR);
len = scm_foreign_object_ref (cstr, CSTR_SLOT_LEN);
addr = scm_foreign_object_ref (cstr, CSTR_SLOT_ADDR);
len = scm_foreign_object_unsigned_ref (cstr, CSTR_SLOT_LEN);
if (strlen (str) != len)
return 0;