On Thu, Sep 17, 2015 at 09:44:19AM -0700, Junio C Hamano wrote: > > Arguably we should actually return the number of bytes we _did_ read, > > but then caller cannot easily tell the difference between EOF and > > EAGAIN. > > Why can't it check errno==EAGAIN/EWOULDBLOCK? Is it trustworthy to check errno if read() has not actually ever returned -1? E.g., consider this sequence: 1. somebody (maybe even us calling strbuf_read) calls read() and it returns -1, setting errno to EAGAIN 2. we call strbuf_read() 2a. it calls read(), which returns N bytes 2b. it calls read() again, which returns 0 for EOF 2c. it returns N, because that's how many bytes it read 3. we wonder if we hit EOF, or if we simply need to read again. We check errno == EAGAIN I don't think the read calls in step 2 are guaranteed to clear errno, and we might read the cruft from step 1. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html