Oh, I see. I though it was meant to be used interchangeably. I can't use
string->blob, though, because that will copy the data and I need to modify
it from C. What foreign type should I use for this sort of thing?

- (c-pointer char) with (location "string") works, but is a lot of typing

- scheme-pointer seems to work, but:

requires type cast in C:

(print ((foreign-lambda* c-string ((scheme-pointer x)) "((char*)x)[0] = 65;
return(x);") "xBC"))

allows all types, I just want blob/string:

(print ((foreign-lambda* c-string ((scheme-pointer x)) "((char*)x)[0] = 65;
return(x);") 45.0))

is there a "string" foreign type that works like "blob", that provides a
(char*) argument and checks that argument is a string? Or is there a
string->blob/shared procedure anywhere?

Thanks,
K.
(should this be moved to chicken-users, perhaps?)



On Wed, Jun 25, 2014 at 3:50 PM, Felix Winkelmann <
[email protected]> wrote:

> > I think I may have found a tiny bug in core. So instead of going on IRC
> and
> > crying to Peter, I though I'd try it myself this time. I have a file like
> > this:
> >
> > (print ((foreign-lambda* c-string ((blob x)) "x[0] = 65; return(x);")
> > "xBC"))
> >
> > When I run this, everything works:
> > $ ./type-test
> > ABC
> >
> > However, I see a warning during compilation which I do not expect:
> >
> > $ csc type-test.scm
> >
> > Warning: at toplevel:
> >   (type-test.scm:2) in procedure call to `g01', expected argument #1 of
> > type `(or boolean blob)', but was given an argument of type `string'
> >
>
> You specify "blob" as foreign type but pass a string as the
> argument. That the generated code works is just a coincedence - blobs
> and strings have the same internal representation. You can use
> "string->blob" to convert the argument to a blob object.
>
>
> felix
>
_______________________________________________
Chicken-hackers mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-hackers

Reply via email to