The following C function is a wrapper for the `read' system call. It returns a pair that contains the number of bytes read and the data. Is this the right way to initialize a u8vector from C?
___SCMOBJ read_bytes (int fd, size_t count) { void *data = malloc (count); ___SCMOBJ result;
if (data == NULL) result = ___make_pair (___BOOLEAN (0), ___BOOLEAN (0), ___STILL); else { int r = read (fd, data, count); ___SCMOBJ retcode; ___SCMOBJ ___err; ___BEGIN_SFUN_INT_TO_SCMOBJ (r, retcode, 1); ___END_SFUN_INT_TO_SCMOBJ (r, retcode, 1); if (r == 0) result = ___make_pair (retcode, ___BOOLEAN (0), ___STILL); else if (r > 0) { ___SCMOBJ data_vect; data_vect = ___alloc_scmobj(___sU8VECTOR, count, ___STILL); ___EXT (___release_scmobj) (data_vect); memcpy (___BODY (data_vect), data, r); result = ___make_pair (retcode, data_vect, ___STILL); } else result = ___make_pair (retcode, ___BOOLEAN (0), ___STILL); free (data); ___release_scmobj (result); } return result; }
Thanks,
--Vijay