Aria Stewart
9/18/2006 6:44:00 PM
On Tue, 2006-09-19 at 03:39 +0900, Francis Cianfrocca wrote:
> On 9/18/06, snacktime <snacktime@gmail.com> wrote:
> >
> > In kerberos when doing an administration function I first need to
> > initialize the system with the credentials of an administrative user
> > like so, with handle being a void pointer initialized to NULL. The
> > following kerberos function will fill handle with a handle for the
> > connection which I can use in subsequent calls to other kadm5
> > functions.
> >
> > kadm5_init_with_password(auser, apass, KADM5_ADMIN_SERVICE, NULL,
> > KADM5_STRUCT_VERSION, KADM5_API_VERSION_2, &handle);
> >
> > Now what I'd like is to return that handle to ruby and be able to pass
> > it back into my C extension when it's needed, such as when needing to
> > call the following kerberos function.
> >
> > kadm5_create_principal(handle, &princ, mask, pass);
> >
> > So how would I do this? If I understand void pointers correctly,
> > handle could be any type after the call to kadm5_init_with_password,
> > so it seems I would want to check it's type after it's set, then find
> > the right type/structure to convert it to or wrap it in before passing
> > it back to ruby? Not that I know how to do that:)
> Void* is almost always the same size as the native integer. (There is
> legitimate controversy over this point but you can depend on it for all ends
> and intents.)
Better to wrap it as a data type in Ruby, which gives you a ruby VALUE
which references the native data. There's a simple macro to grab the
original pointer given the VALUE.
DEC Alpha doesn't necessarily have sizeof(int) == sizeof(void *), so
please don't assume so. I hate fixing code that does that. ;-)
Aria (A kerberos user, too!)