120 lines
3.1 KiB
C++
120 lines
3.1 KiB
C++
|
// Copyright (c) 2006, 2007 Julio M. Merino Vidal
|
||
|
// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
|
||
|
// Copyright (c) 2009 Boris Schaeling
|
||
|
// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
|
||
|
// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
|
||
|
// Copyright (c) 2016 Klemens D. Morgenstern
|
||
|
//
|
||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||
|
|
||
|
/**
|
||
|
* \file boost/process/config.hpp
|
||
|
*
|
||
|
* Defines various macros.
|
||
|
*/
|
||
|
|
||
|
#ifndef BOOST_PROCESS_DETAIL_CONFIG_HPP
|
||
|
#define BOOST_PROCESS_DETAIL_CONFIG_HPP
|
||
|
|
||
|
#include <boost/config.hpp>
|
||
|
#include <system_error>
|
||
|
#include <boost/system/api_config.hpp>
|
||
|
|
||
|
#include <boost/process/exception.hpp>
|
||
|
|
||
|
#if defined(BOOST_POSIX_API)
|
||
|
#include <errno.h>
|
||
|
#if defined(__GLIBC__)
|
||
|
#include <features.h>
|
||
|
#else
|
||
|
extern char **environ;
|
||
|
#endif
|
||
|
#elif defined(BOOST_WINDOWS_API)
|
||
|
#include <boost/winapi/get_last_error.hpp>
|
||
|
#else
|
||
|
#error "System API not supported by boost.process"
|
||
|
#endif
|
||
|
|
||
|
namespace boost { namespace process { namespace detail
|
||
|
{
|
||
|
|
||
|
#if !defined(BOOST_PROCESS_PIPE_SIZE)
|
||
|
#define BOOST_PROCESS_PIPE_SIZE 1024
|
||
|
#endif
|
||
|
|
||
|
#if defined(BOOST_POSIX_API)
|
||
|
namespace posix {namespace extensions {}}
|
||
|
namespace api = posix;
|
||
|
|
||
|
inline std::error_code get_last_error() noexcept
|
||
|
{
|
||
|
return std::error_code(errno, std::system_category());
|
||
|
}
|
||
|
|
||
|
//copied from linux spec.
|
||
|
#if (_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && !(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
|
||
|
#define BOOST_POSIX_HAS_VFORK 1
|
||
|
#endif
|
||
|
|
||
|
#if (_POSIX_C_SOURCE >= 199309L)
|
||
|
#define BOOST_POSIX_HAS_SIGTIMEDWAIT 1
|
||
|
#endif
|
||
|
|
||
|
#elif defined(BOOST_WINDOWS_API)
|
||
|
namespace windows {namespace extensions {}}
|
||
|
namespace api = windows;
|
||
|
|
||
|
inline std::error_code get_last_error() noexcept
|
||
|
{
|
||
|
return std::error_code(::boost::winapi::GetLastError(), std::system_category());
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
inline void throw_last_error(const std::string & msg)
|
||
|
{
|
||
|
throw process_error(get_last_error(), msg);
|
||
|
}
|
||
|
|
||
|
inline void throw_last_error(const char * msg)
|
||
|
{
|
||
|
throw process_error(get_last_error(), msg);
|
||
|
}
|
||
|
|
||
|
inline void throw_last_error()
|
||
|
{
|
||
|
throw process_error(get_last_error());
|
||
|
}
|
||
|
|
||
|
inline void throw_error(const std::error_code& ec)
|
||
|
{
|
||
|
if (ec)
|
||
|
throw process_error(ec);
|
||
|
}
|
||
|
|
||
|
inline void throw_error(const std::error_code& ec, const char* msg)
|
||
|
{
|
||
|
if (ec)
|
||
|
throw process_error(ec, msg);
|
||
|
}
|
||
|
|
||
|
template<typename Char> constexpr Char null_char();
|
||
|
template<> constexpr char null_char<char> (){return '\0';}
|
||
|
template<> constexpr wchar_t null_char<wchar_t> (){return L'\0';}
|
||
|
|
||
|
template<typename Char> constexpr Char equal_sign();
|
||
|
template<> constexpr char equal_sign<char> () {return '='; }
|
||
|
template<> constexpr wchar_t equal_sign<wchar_t> () {return L'='; }
|
||
|
|
||
|
template<typename Char> constexpr Char quote_sign();
|
||
|
template<> constexpr char quote_sign<char> () {return '"'; }
|
||
|
template<> constexpr wchar_t quote_sign<wchar_t> () {return L'"'; }
|
||
|
|
||
|
template<typename Char> constexpr Char space_sign();
|
||
|
template<> constexpr char space_sign<char> () {return ' '; }
|
||
|
template<> constexpr wchar_t space_sign<wchar_t> () {return L' '; }
|
||
|
|
||
|
|
||
|
}}}
|
||
|
#endif
|