What's needed is some way to provide key information C doesn't have. Mostly about array sizes. Some way to annotate
int read(int fd, void* buf, size_t len)
to tell the system that buf has size len.A file of translation hints with such info could guide the translator into producing decent Rust. Most of the things done with pointer arithmetic can be expressed with slices. (Things being done with pointer arithmetic which can't be expressed as slices should be viewed with deep suspicion.) But you need size info to do that.