1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include <unistd.h> #include <errno.h> int const_io(int (*op)(), int fd, void *buf, int len) /*EXTRACT_INCL*/{ char *x = buf; while (len > 0) { int ret = op(fd, x, len); if (ret <= 0) { if (ret && errno == EINTR) continue; break; } x += ret; len -= ret; } return len; }