]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/test/utils/runtime/env/fetch.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / test / utils / runtime / env / fetch.hpp
1 // (C) Copyright Gennadiy Rozental 2001.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5
6 // See http://www.boost.org/libs/test for the library home page.
7 //
8 // File : $RCSfile$
9 //
10 // Version : $Revision$
11 //
12 // Description : implements fetching absent parameter athuments from environment
13 // ***************************************************************************
14
15 #ifndef BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
16 #define BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP
17
18 // Boost.Test Runtime parameters
19 #include <boost/test/utils/runtime/parameter.hpp>
20 #include <boost/test/utils/runtime/argument.hpp>
21
22 #include <boost/test/detail/suppress_warnings.hpp>
23
24 // C Runtime
25 #include <stdlib.h>
26
27 namespace boost {
28 namespace runtime {
29 namespace env {
30
31 namespace env_detail {
32
33 #ifndef UNDER_CE
34
35 #ifdef BOOST_MSVC
36 #pragma warning(push)
37 #pragma warning(disable:4996) // getenv
38 #endif
39
40 inline std::pair<cstring,bool>
41 sys_read_var( cstring var_name )
42 {
43 using namespace std;
44 char const* res = getenv( var_name.begin() );
45
46 return std::make_pair( cstring(res), res != NULL );
47 }
48
49 #ifdef BOOST_MSVC
50 #pragma warning(pop)
51 #endif
52
53 #else
54
55 inline std::pair<cstring,bool>
56 sys_read_var( cstring var_name )
57 {
58 return std::make_pair( cstring(), false );
59 }
60
61 #endif
62
63 //____________________________________________________________________________//
64
65 template<typename ReadFunc>
66 inline void
67 fetch_absent( parameters_store const& params, runtime::arguments_store& args, ReadFunc read_func )
68 {
69 BOOST_TEST_FOREACH( parameters_store::storage_type::value_type const&, v, params.all() ) {
70 basic_param_ptr param = v.second;
71
72 if( args.has( param->p_name ) || param->p_env_var.empty() )
73 continue;
74
75 std::pair<cstring,bool> value = read_func( param->p_env_var );
76
77 if( !value.second )
78 continue;
79
80 // Validate against unexpected empty value
81 BOOST_TEST_I_ASSRT( !value.first.is_empty() || param->p_has_optional_value,
82 format_error( param->p_name )
83 << "Missing an argument value for the parameter " << param->p_name
84 << " in the environment." );
85
86 // Produce argument value
87 param->produce_argument( value.first, false, args );
88
89 }
90 }
91
92 //____________________________________________________________________________//
93
94 } // namespace env_detail
95
96 inline void
97 fetch_absent( parameters_store const& params, runtime::arguments_store& args )
98 {
99 env_detail::fetch_absent( params, args, &env_detail::sys_read_var );
100 }
101
102 } // namespace env
103 } // namespace runtime
104 } // namespace boost
105
106 #include <boost/test/detail/enable_warnings.hpp>
107
108 #endif // BOOST_TEST_UTILS_RUNTIME_ENV_FETCH_HPP