static int block_on_read()

in watchman.c [357:380]


static int block_on_read(int fd, struct timeval *timeout)
{
    struct timeval now, start, elapsed, orig_timeout;
    fd_set fds;
    int ret = 0;

    FD_ZERO(&fds);
    FD_SET(fd, &fds);

    if (timeout != NULL) {
        gettimeofday(&start, NULL);
        memcpy(&orig_timeout, timeout, sizeof(orig_timeout));
    }

    ret = select(fd + 1, &fds, NULL, NULL, timeout);

    if (timeout != NULL) {
        gettimeofday(&now, NULL);
        timersub(&now, &start, &elapsed);
        timersub(&orig_timeout, &elapsed, timeout);
    }

    return ret;
}