1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/* 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * poll_posix: poll compatibility wrapper for POSIX systems 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Copyright © 2013 RealVNC Ltd. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * This library is free software; you can redistribute it and/or 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * modify it under the terms of the GNU Lesser General Public 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * License as published by the Free Software Foundation; either 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * version 2.1 of the License, or (at your option) any later version. 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * This library is distributed in the hope that it will be useful, 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Lesser General Public License for more details. 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * You should have received a copy of the GNU Lesser General Public 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * License along with this library; if not, write to the Free Software 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <unistd.h> 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <fcntl.h> 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <errno.h> 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <stdlib.h> 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "libusbi.h" 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint usbi_pipe(int pipefd[2]) 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch{ 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int ret = pipe(pipefd); 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (ret != 0) { 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return ret; 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ret = fcntl(pipefd[1], F_GETFL); 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (ret == -1) { 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usbi_dbg("Failed to get pipe fd flags: %d", errno); 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch goto err_close_pipe; 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ret = fcntl(pipefd[1], F_SETFL, ret | O_NONBLOCK); 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (ret != 0) { 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usbi_dbg("Failed to set non-blocking on new pipe: %d", errno); 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch goto err_close_pipe; 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return 0; 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdocherr_close_pipe: 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usbi_close(pipefd[0]); 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usbi_close(pipefd[1]); 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return ret; 51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 52