Reader must return NULL when finished.