felix winkelmann schrieb:
> On 7/4/07, foobar <[EMAIL PROTECTED]> wrote:
>> hi,
>>
>> as the title allready suggests i'm looking for a way to return a list
>> from within
>> a c-function. I know how to return a list, but what i don't know is how
>> to fill
>> some of the elements with strings. More importantly how does the
>> allocation-deallocation-
>> scheme look like in this situation?
>>
>> Here is a minimal example of what i want to do
>>
>> C_word return_a_list(){
>>      int a = 1;
>>      char *str = "just a test";
>>      /* now i need to make the string an object that can be carried
>>         around by the list. But how? C_string or C_string2? */
>>
>>     /* finally return the list with the ??? actually being something
>> reasonable*/
>>      C_return(C_h_list(2,C_fix(a),???);
>> }
>>
>>
>> How can this be done in a safe way?
>>
>
> You have to use storage that can be garbage collected, which means stack
> storage. I recommend "foreign-primitive" and use "C_alloc" to allocate
> the
> storage and "C_string2" to allocate the string.
>

Great thanks. Just to be sure i've done it correctly.
Here is an example on how i would return a list of one string element.

(define return-a-list-with-string-elt
  (foreign-primitive scheme-object ()
                   "char str[] = \"hallo\";"
                   "C_word *sstr = C_alloc(C_SIZEOF_STRING(strlen(str)));"
                   "C_return(C_h_list(1,C_string2(&sstr,str)));"))

This code works as expected.
It does hopefully allso not leak memory.

greets david



_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to