- assert(source->bytes_available >= 2);
- assert(source->bytes[0] == MARKER_CHAR);
- assert(source->bytes[1] != STUFF_MARKER);
+ // Refill until we have at least two bytes or EOF.
+ while (src->bytes_available < 2) {
+ const unsigned bytes_to_read = 2 - src->bytes_available;
+ const ssize_t bytes_read =
+ (*src->input_func)(src->userdata,
+ src->bytes + src->bytes_available,
+ bytes_to_read);
+ assert(bytes_read >= -1);
+ assert(bytes_read <= (ssize_t)bytes_to_read);
+
+ if (bytes_read == -1 || bytes_read == 0) {
+ return 0x00;
+ }