compat: add function to enable nonblocking pipes
commit10f743389ca9a92720fb9c3d15f647888d82c297
authorJeff King <peff@peff.net>
Wed, 17 Aug 2022 06:04:55 +0000 (17 02:04 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Aug 2022 16:21:40 +0000 (17 09:21 -0700)
tree4b12b9d074f1c924538af81e8c9d872a0a9baf2f
parentad60dddad72dfb8367bd695028b5b8dc6c33661b
compat: add function to enable nonblocking pipes

We'd like to be able to make some of our pipes nonblocking so that
poll() can be used effectively, but O_NONBLOCK isn't portable. Let's
introduce a compat wrapper so this can be abstracted for each platform.

The interface is as narrow as possible to let platforms do what's
natural there (rather than having to implement fcntl() and a fake
O_NONBLOCK for example, or having to handle other types of descriptors).

The next commit will add Windows support, at which point we should be
covering all platforms in practice. But if we do find some other
platform without O_NONBLOCK, we'll return ENOSYS. Arguably we could just
trigger a build-time #error in this case, which would catch the problem
earlier. But since we're not planning to use this compat wrapper in many
code paths, a seldom-seen runtime error may be friendlier for such a
platform than blocking compilation completely. Our test suite would
still notice it.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
compat/nonblock.c [new file with mode: 0644]
compat/nonblock.h [new file with mode: 0644]