int watchman_pclose()

in watchman.c [321:349]


int watchman_pclose(struct watchman_error *error, struct watchman_popen *popen)
{
    close(popen->fd);

    int status;
    int pid = waitpid(popen->pid, &status, 0);
    if (pid < 0) {
        watchman_err(error, WATCHMAN_ERR_RUN_WATCHMAN, get_sockname_msg,
                     strerror(errno));
        return -1;
    }

    switch(WEXITSTATUS(status)) {
    case 0:
        return 0;
    case WATCHMAN_EXEC_FAILED:
        watchman_err(error, WATCHMAN_ERR_RUN_WATCHMAN, get_sockname_msg,
                     strerror(errno));
        return -1;
    case WATCHMAN_EXEC_INTERNAL_ERROR:
        watchman_err(error, WATCHMAN_ERR_OTHER, get_sockname_msg,
                     strerror(errno));
        return -1;
    default:
        watchman_err(error, WATCHMAN_ERR_WATCHMAN_BROKEN, get_sockname_msg,
                     strerror(errno));
        return -1;
    }
}