[cffi-devel] Re: [Sbcl-devel] encoding of alien c-string once again

Juho Snellman jsnell at iki.fi
Thu Apr 27 19:59:16 UTC 2006


[ CC:d to cffi-devel, in case the FFI experts have any opinions on
  external-format handling. ]

Yaroslav Kavenchuk <kavenchuk at jenty.by> writes:
> I have impudence to offer dear community patch for non-ascii encoding
> of alien c-string once again.
> 
> (Maybe me have forgotten? :)

Thanks. There are some issues with this patch.

  * On non-windows platforms we need to naturalize a string to find
    out the default external format, and after this change we need to
    know the default external format to naturalize a string. But
    that's easy to fix.

  * Also, the patch can't be used stand-alone, since other SBCL
    internals (e.g. pathname handling) assume that a c-string alien
    type will be naturalized to a simple-base-string. What's the right
    thing to do here? Add a new alien-type that does the conversion,
    and leave c-string as-is, or change to change the behaviour of
    c-string?

  * I'm not sure that the interface is quite right. It seems probable
    that at one point or another somebody will need to use multiple
    external formats at once (ebcdic for pathnames and latin-1 for a
    database connection, or something). So we might need to be able to
    parametrize the external format to be used when defining the
    types. As a silly example:

    (define-alien-routine strdup (c-string :external-format :latin-1)
       (str (c-string :external-format :utf-8)))

    (Hmm... maybe using a keyword parameter for this is excessive, and
    an optional would do).

    James, Luis, would something like this be useful for CFFI? Would
    the proposed interface work for you? Any opinions on the c-string
    issue mentioned above?

    A patch implementing this functionality (including Yaroslav's work):
    http://jsnell.iki.fi/tmp/alien-again.diff

-- 
Juho Snellman




More information about the cffi-devel mailing list