Hi Vijay,
Looks good.
A possible improvement is to drop the malloc() call you do and just read() straight into ___BODY(data_vect) , this saves you a round of copying too, and is also in some limited sense safer as there's no malloc() that could return NULL anymore.
Last note would be that at the time SMP is released, every access out there of the Scheme heap from C calls such as ___BODY() will need to be gone through as then, I suppose, unlike now, GC:s could happen also during FFI calls - my best understanding is that the primary solution will be using ___STILL objects only. Interestingly enough, this is what |make-u8vector| makes already today, for u8vectors bigger than ___MSECTION_BIGGEST , however that logic is not a lot to be relied on so I guess it'll be relevant to implement a |make-still-u8vector| or alike then.
Mikael