Deal with reading a buffer less than what was allocated.

With this fix, file_long_read now passes.
> (it still detects exactly all of the same error conditions)

But it detects non-errors as errors, that's the point, placing arbitrary restrictions (halving in two) how large data can be operated on.