Re: [PATCH v2] config: avoid "write_in_full(fd, buf, len) < len" pattern
From: Jeff King <hidden>
Date: 2017-09-13 18:58:56
On Wed, Sep 13, 2017 at 11:24:31AM -0700, Jonathan Nieder wrote:
For what it's worth, Reviewed-by: Jonathan Nieder <redacted>
Thanks, and thank you for questioning the ptrdiff_t bits that didn't make sense. I _thought_ they felt like nonsense, but couldn't quite puzzle it out.
Compilers' signed/unsigned comparison warning can be noisy, but I'm starting to feel it's worth the suppression noise to turn it on when DEVELOPER=1 anyway. What do you think? Is there a way to turn it on selectively for certain functions on the LHS (like read() and write() style functions)?
Obviously we couldn't turn them on for -Werror at this point. Let me see how bad "-Wsign-compare -Wno-error=sign-compare" is. $ make 2>&1 | grep -c warning: 1391 Ouch. I'm afraid that's probably not going to be very helpful. Even if I were introducing a new problem, I'm not likely to see it amidst the mass of existing complaints. AFAIK there's no way to turn it on for specific functions, but I'm far from a gcc-warning guru. Even if you could, though, the error may be far from the function (e.g., if we store the result in an ssize_t and then compare that with a size_t). Interestingly in the write_in_full() case the code was actually unreachable! But I don't think the compiler is smart enough to know that, because it would have to realize that write_in_full() can only return either -1 or the original value (and not a positive value in between). Coverity _might_ be smart enough, but figuring that out does take some loop analysis (including the assumption that write() never returns more bytes than we asked it to write). -Peff