On Jan 12, 6:52 ¨Βν¬ Θεεσοβ Παςλ Όπθα®®®ΐηναιμ®γονΎ χςοτεΊ > Hi, > > 2010/1/13 Daniel Berger <djber... / gmail.com>: > > > > > Hi, > > > I'm trying to wrap two function calls from kerberos, krb5_init_context > > and krb5_free_context. Here are the prototypes for both: > > > krb5_init_context(krb5_context * context) => krb5_error_code > > krb5_free_context(krb5_context context) => void > > > krb5_context is a struct, but unfortunately I don't know what its > > members are. > > > From the docs: > > > The krb5_context structure is designed to hold all per thread > > state. All > > global variables that are context specific are stored in this > > structure, > > including default encryption types, credentials-cache (ticket > > file), and > > default realms. > > > The internals of the structure should never be accessed directly, > > func- > > tions exist for extracting information. > > > All I know is that it's 8 bytes in size. > > > I tried something like this, but it didn't work: > > > require 'ffi' > > > module Krb5 > > ¨Βμασσ Γοξτεψ> > ¨ΒψτεξΖΖΙΊΊΜιβςαςω > > > ¨Βμασσ ΕςςοΣταξδαςδΕςςος» εξ> > > ¨Βζιίμιβ §λςβµ§ > > > ¨Βτταγθίζυξγτιοξ ΊλςβµίιξιτίγοξτεψτΫΊστςιξηέ¬ Ίυιξ> > ¨Βτταγθίζυξγτιοξ ΊλςβµίζςεείγοξτεψτΫΊστςιξηέ¬ Ίφοι> > > ¨Βεζ ιξιτιαμιϊε > > ¨ΒγτΖΖΙΊΊΝενοςωΠοιξτες®ξεχ¨Ίποιξτες¬ Έ© > > ¨Βετ λςβµίιξιτίγοξτεψτ¨ΐγτψ> > > ¨Βςε> > ¨Βαισε Εςςος¬ Άλςβµίιξιτίγοξτεψτ¨© ζαιμεδ> > ¨Βξδ > > > ¨ΒβμογλίηιφεξΏ > > ¨Βεηιξ > > ¨Βιεμδ σεμζ > > ¨Βξσυς> > ¨Βςε> > ¨Βξδ > > ¨Βξδ > > ¨Βξδ > > > ¨Βεζ ζςεε > > ¨Βςβµίζςεείγοξτεψτ¨ΐγτψ© > > ¨Βξδ > > ¨Βξδ > > end > > > k = Krb5::Context.new > > k.free > > > I can use a plain string buffer, but then it segfaults on the 'free' > > call. > > > Any suggestions? > > In my test platform, sizeof(krb5_context) is 4. > Here is a working code: > > require 'ffi' > > module Krb5 > ¨Βμασσ Γοξτεψ> ¨ΒψτεξΖΖΙΊΊΜιβςαςω > > ¨Βμασσ ΕςςοΣταξδαςδΕςςος» εξ> > ¨Βζιίμιβ §λςβµ§ > > ¨Βτταγθίζυξγτιοξ ΊλςβµίιξιτίγοξτεψτΫΊποιξτεςέΊυιξ> ¨Βτταγθίζυξγτιοξ ΊλςβµίζςεείγοξτεψτΫΊυιξτέ¬ Ίφοι> > ¨Βεζ ιξιτιαμιϊε > ¨Βτς ΖΖΙΊΊΝενοςωΠοιξτες®ξεχ¨Ίγθας΄© > ¨Βετ λςβµίιξιτίγοξτεψτ¨πτς© > ¨Βςε> ¨Βαισε Εςςος¬ Άλςβµίιξιτίγοξτεψτ¨© ζαιμεδ> ¨Βξδ > ¨Βγτπτς®ςεαδίιξτ > > ¨ΒβμογλίηιφεξΏ > ¨Βεηιξ > ¨Βιεμδ σεμζ > ¨Βξσυς> ¨Βςε> ¨Βξδ > ¨Βξδ > ¨Βξδ > > ¨Βεζ ζςεε > ¨Βςβµίζςεείγοξτεψτ¨ΐγτψ© > ¨Βξδ > ¨Βξδ > end > > k = Krb5::Context.new > k.free This almost got me there. I had to modify it somewhat to account for the fact that I'm on Snow Leopard (x64), so I replaced :uint with :long, 4 with 8 and ptr.read_int with ptr.read_long. Now I need to figure out how to create an FFI::MemoryPointer without necessarily knowing the size of the first argument. Thanks for the help! Regards, Dan