use closefrom() where available
e.g. on Linux via libbsd - or on BSDs where the symbol exists
This commit is contained in:
parent
064e38eae9
commit
3c28143a75
|
@ -5,6 +5,17 @@ project(somake C CXX)
|
|||
|
||||
include(CheckFunctionExists)
|
||||
check_function_exists(wcsdup HAVE_WCSDUP)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
find_package(PkgConfig)
|
||||
pkg_search_module(BSD libbsd)
|
||||
if (BSD_LIBRARIES)
|
||||
set(HAVE_CLOSEFROM 1)
|
||||
endif()
|
||||
else()
|
||||
check_function_exists(closefrom HAVE_CLOSEFROM)
|
||||
endif()
|
||||
|
||||
configure_file(config.h.in config.h)
|
||||
|
||||
add_library(mksh STATIC
|
||||
|
@ -37,10 +48,11 @@ set_property(TARGET ${PROJECT_NAME} mksh vroot PROPERTY INCLUDE_DIRECTORIES
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${BSD_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
mksh vroot pthread
|
||||
mksh vroot pthread ${BSD_LIBRARIES}
|
||||
)
|
||||
|
||||
# default install prefix is /usr/local
|
||||
|
|
|
@ -3,5 +3,6 @@
|
|||
#define SOMAKE_CONFIG_H
|
||||
|
||||
#cmakedefine HAVE_WCSDUP 1
|
||||
#cmakedefine HAVE_CLOSEFROM 1
|
||||
|
||||
#endif
|
||||
|
|
|
@ -51,9 +51,15 @@
|
|||
#include <sys/wait.h> /* wait() */
|
||||
#include <ulimit.h> /* ulimit() */
|
||||
#include <unistd.h> /* close(), dup2() */
|
||||
// closefrom only available on Solaris/BSD
|
||||
#include <stdlib.h> /* closefrom() */
|
||||
#ifdef __linux
|
||||
#include <bsd/unistd.h>
|
||||
#endif
|
||||
#include <libintl.h>
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/*
|
||||
* typedefs & structs
|
||||
*/
|
||||
|
@ -93,12 +99,10 @@ redirect_io(char *stdout_file, char *stderr_file)
|
|||
{
|
||||
int i;
|
||||
|
||||
#ifdef __sun
|
||||
#ifdef HAVE_CLOSEFROM
|
||||
(void) closefrom(3);
|
||||
#else
|
||||
// XXX not available on Linux
|
||||
// if necessary, could provide a compatibility function that
|
||||
// iterates over /proc/$(getpid())/fd ...
|
||||
#warning "Compiling without closefrom ... consider linking libbsd ..."
|
||||
#endif
|
||||
if ((i = my_open(stdout_file,
|
||||
O_WRONLY | O_CREAT | O_TRUNC | O_DSYNC,
|
||||
|
|
Loading…
Reference in a new issue