ssize_t custom_read_slow(void* userdata, uint8_t* buf, size_t count)
{
struct custom_read_userdata* ud = (struct custom_read_userdata*)userdata;
- size_t num_to_read = (count > 0 ? 1 : 0);
+ size_t num_to_read = ((count > 0 && ud->bytes_left > 0) ? 1 : 0);
memcpy(buf, ud->bytes, num_to_read);
ud->bytes += num_to_read;
ud->bytes_left -= num_to_read;
ud.bytes = bytes;
ud.bytes_left = sizeof(bytes);
- struct data_source source;
- init_data_source(&source, custom_read, &ud);
+ struct bit_source source;
+ init_bit_source(&source, custom_read, &ud);
for (int i = 0; i < sizeof(bytes) * 8 / 6; ++i) {
possibly_refill(&source, 6);
ud.bytes = bytes;
ud.bytes_left = sizeof(bytes);
- struct data_source source;
- init_data_source(&source, custom_read_slow, &ud);
+ struct bit_source source;
+ init_bit_source(&source, custom_read_slow, &ud);
for (int i = 0; i < sizeof(bytes) * 8 / 6; ++i) {
possibly_refill(&source, 6);
ud.bytes = bytes;
ud.bytes_left = sizeof(bytes);
- struct data_source source;
- init_data_source(&source, custom_read, &ud);
+ struct bit_source source;
+ init_bit_source(&source, custom_read, &ud);
{
possibly_refill(&source, 4);