Incremental improvement is a hard constraint here.
Keeping track of pointer and length in two separate variables, when the C program has a freedom to do whatever it wants with them, creates a lot of hassle and edge cases to deal with. If C had a concept of a slice/array view that manages ptr+length as a single entity, it'd be so much easier.