// 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) #ifndef BOOST_PROCESS_DETAIL_WINDOWS_ENV_INIT_HPP_ #define BOOST_PROCESS_DETAIL_WINDOWS_ENV_INIT_HPP_ #include #include #include #include #include namespace boost { namespace process { namespace detail { namespace windows { template struct env_init : public ::boost::process::detail::handler_base { boost::process::basic_environment env; env_init(boost::process::basic_environment && env) : env(std::move(env)) {}; env_init(const boost::process::basic_environment & env) : env(env) {}; constexpr static ::boost::winapi::DWORD_ creation_flag(char) {return 0u;} constexpr static ::boost::winapi::DWORD_ creation_flag(wchar_t) { return ::boost::winapi::CREATE_UNICODE_ENVIRONMENT_; } template void on_setup(WindowsExecutor &exec) const { auto e = env.native_handle(); if (*e == null_char()) { exec.set_error(std::error_code(::boost::winapi::ERROR_BAD_ENVIRONMENT_, std::system_category()), "Empty Environment"); } exec.env = e; exec.creation_flags |= creation_flag(Char()); } }; }}}} #endif /* BOOST_PROCESS_DETAIL_WINDOWS_ENV_INIT_HPP_ */