don't return undef, but the result of read