Instead of returning bool to indicate that there is more data to read set data->continue_reading = true. It's less error porne because if the user doesn't set the flag the indev will be read once which is usually the inteded behaviour.