From: Duncan Mac-Vicar P Date: Tue, 22 Mar 2011 10:45:29 +0000 (+0100) Subject: pipe2 is not available in older kernels and glibc X-Git-Tag: 9.1.0~25 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c0b924f6a9c9d4e14fde1288abdfc80c84fa3379;p=platform%2Fupstream%2Flibzypp.git pipe2 is not available in older kernels and glibc --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 83fad9ec6..f3e33cb57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,12 @@ IF(${CXX_FORMAT_SECURITY}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=format-security") ENDIF(${CXX_FORMAT_SECURITY}) +INCLUDE(CheckFunctionExists) +CHECK_FUNCTION_EXISTS(pipe2 PIPE2_FOUND) +IF(${PIPE2_FOUND}) + ADD_DEFINITIONS(-DHAVE_PIPE2) +ENDIF(${PIPE2_FOUND}) + ADD_DEFINITIONS( -D_FILE_OFFSET_BITS=64 ) ADD_DEFINITIONS( -DVERSION="${VERSION}" ) SET( LIBZYPP_VERSION_INFO "${LIBZYPP_SO_FIRST}.${LIBZYPP_AGE}.${LIBZYPP_PATCH}" ) diff --git a/zypp/ExternalProgram.cc b/zypp/ExternalProgram.cc index 35c903a4a..c319192d4 100644 --- a/zypp/ExternalProgram.cc +++ b/zypp/ExternalProgram.cc @@ -572,7 +572,13 @@ namespace zypp { EarlyPipe::EarlyPipe() { _fds[R] = _fds[W] = -1; +#ifdef HAVE_PIPE2 ::pipe2( _fds, O_NONBLOCK ); +#else + ::pipe( _fds ); + ::fcntl(_fds[R], F_SETFD, O_NONBLOCK ); + ::fcntl(_fds[W], F_SETFD, O_NONBLOCK ); +#endif _stderr = ::fdopen( _fds[R], "r" ); }