<div dir="ltr"><div><span style="font-family:arial,sans-serif;font-size:13px">Yes, and then take proper care of the other arguments i.e.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div>

<span style="font-family:arial,sans-serif;font-size:13px">(define read-bytes (c-lambda (int unsigned-int scheme-object) int "___result = read_bytes(___ARG1,___BODY(___ARG3),___ARG2);"))</span><br><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/26 Vijay Mathew <span dir="ltr"><<a href="mailto:vijay.the.lisper@gmail.com" target="_blank">vijay.the.lisper@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div>Thanks again for all the great feedback!<br><br></div>I think the call to ____FIX() is not required if Scheme code access the C function through a declaration like this:<br>

<br>(define read-bytes (c-lambda (int unsigned-int scheme-object) int "read_bytes"))<br>
<br></div>Is that correct?<br><br></div>Thanks,<br><br></div>--Vijay<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 25, 2013 at 8:34 PM, Marc Feeley <span dir="ltr"><<a href="mailto:feeley@iro.umontreal.ca" target="_blank">feeley@iro.umontreal.ca</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
On 2013-09-25, at 4:48 AM, Vijay Mathew <<a href="mailto:vijay.the.lisper@gmail.com" target="_blank">vijay.the.lisper@gmail.com</a>> wrote:<br>
<br>
> Hi,<br>
><br>
> Thanks for reviewing my code.<br>
><br>
> I have updated the C function as follows:<br>
><br>
> int read_bytes (int fd, size_t count, ___SCMOBJ data_vect)<br>
>  {<br>
>    void *data = malloc (count);<br>
>    int result;<br>
><br>
>    if (data == NULL)<br>
>      result = -1;<br>
>    else<br>
>      {<br>
>        result = read (fd, data, count);<br>
>        if (result > 0)<br>
>          memcpy (___BODY (data_vect), data, result);<br>
>        free (data);<br>
>      }<br>
>    return result;<br>
>  }<br>
><br>
> A call from scheme will look like:<br>
><br>
> (read-bytes fd count (make-u8vector count 0))<br>
><br>
> I suppose now I don't have to worry about leaks or heap-overflow-exceptions.<br>
<br>
</div>You can simplify you code further to:<br>
<div><br>
 int read_bytes (int fd, size_t count, ___SCMOBJ data_vect)<br>
 {<br>
</div>   return ___FIX(read (fd, ___BODY(data_vect), count));<br>
 }<br>
<span><font color="#888888"><br>
Marc<br>
<br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>