Regarding make-custom-textual-input-port:  It uses a string as a buffer, which doesn't play well with the implementations that uses quasi-immutable strings; by which I mean, a string is a pointer to an immutable string body or a structure consists of immutable chunks, and mutating a part of it involves more than just filling an array of characters.
I forgot how I argued during r6rs process (I'm too lazy to dig mail archive) but I should've opposed to it unless I overlooked it.

The string passed to read! is actually just an intermediate buffer from which port's reader reads one character at a time.  A vector of characters is sufficient for that purpose, plus it is guaranteed to be O(1) reference and mutation, while strings are not.

Using a string as a mutable buffer is a terrible custom that should go away.

So I propose to make it a vector of characters.