// // process/environment/detail/environment_posix.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2021 Klemens D. Morgenstern (klemens dot morgenstern at gmx dot net) // // 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) // #ifndef BOOST_PROCESS_V2_DETAIL_ENVIRONMENT_POSIX_HPP #define BOOST_PROCESS_V2_DETAIL_ENVIRONMENT_POSIX_HPP #include #include #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__APPLE__) || defined(__MACH__) extern "C" { extern char **environ; } #endif BOOST_PROCESS_V2_BEGIN_NAMESPACE namespace environment { using char_type = char; template using key_char_traits = std::char_traits; template using value_char_traits = std::char_traits; constexpr char_type equality_sign = '='; constexpr char_type delimiter = ':'; namespace detail { BOOST_PROCESS_V2_DECL basic_cstring_ref> get(basic_cstring_ref> key, error_code & ec); BOOST_PROCESS_V2_DECL void set(basic_cstring_ref> key, basic_cstring_ref> value, error_code & ec); BOOST_PROCESS_V2_DECL void unset(basic_cstring_ref> key, error_code & ec); } using native_handle_type = const char * const *; using native_iterator = native_handle_type; namespace detail { BOOST_PROCESS_V2_DECL native_handle_type load_native_handle(); struct native_handle_deleter { void operator()(native_handle_type) const {} }; BOOST_PROCESS_V2_DECL native_iterator next(native_handle_type nh); BOOST_PROCESS_V2_DECL native_iterator find_end(native_handle_type nh); inline const char_type * dereference(native_iterator iterator) {return *iterator;} BOOST_PROCESS_V2_DECL bool is_executable(const filesystem::path & pth, error_code & ec); } } BOOST_PROCESS_V2_END_NAMESPACE #endif