8 #ifndef BOOST_NOWIDE_ARGS_HPP_INCLUDED 9 #define BOOST_NOWIDE_ARGS_HPP_INCLUDED 11 #include <boost/config.hpp> 13 #include <boost/nowide/stackstring.hpp> 14 #include <boost/nowide/windows.hpp> 21 #if !defined(BOOST_WINDOWS) && !defined(BOOST_NOWIDE_DOXYGEN) 27 args(
int&,
char**&,
char**&)
63 args(
int& argc,
char**& argv) :
64 old_argc_(argc), old_argv_(argv), old_env_(0), old_argc_ptr_(&argc), old_argv_ptr_(&argv), old_env_ptr_(0)
71 args(
int& argc,
char**& argv,
char**& env) :
72 old_argc_(argc), old_argv_(argv), old_env_(env), old_argc_ptr_(&argc), old_argv_ptr_(&argv),
84 *old_argc_ptr_ = old_argc_;
86 *old_argv_ptr_ = old_argv_;
88 *old_env_ptr_ = old_env_;
100 p = CommandLineToArgvW(GetCommandLineW(), &argc);
107 wargv_ptr(
const wargv_ptr&) =
delete;
108 wargv_ptr& operator=(
const wargv_ptr&) =
delete;
114 operator bool()
const 118 const wchar_t* operator[](
size_t i)
const 128 wenv_ptr() : p(GetEnvironmentStringsW())
133 FreeEnvironmentStringsW(p);
135 wenv_ptr(
const wenv_ptr&) =
delete;
136 wenv_ptr& operator=(
const wenv_ptr&) =
delete;
138 operator const wchar_t*()
const 144 void fix_args(
int& argc,
char**& argv)
146 const wargv_ptr wargv;
148 throw std::runtime_error(
"Could not get command line!");
149 args_.resize(wargv.size() + 1, 0);
150 arg_values_.resize(wargv.size());
151 for(
int i = 0; i < wargv.size(); i++)
152 args_[i] = arg_values_[i].convert(wargv[i]);
156 void fix_env(
char**& env)
158 const wenv_ptr wstrings;
160 throw std::runtime_error(
"Could not get environment strings!");
161 const wchar_t* wstrings_end = 0;
163 for(wstrings_end = wstrings; *wstrings_end; wstrings_end += wcslen(wstrings_end) + 1)
165 env_.
convert(wstrings, wstrings_end);
166 envp_.resize(count + 1, 0);
167 char* p = env_.
get();
169 for(
int i = 0; i < count; i++)
178 std::vector<char*> args_;
179 std::vector<short_stackstring> arg_values_;
181 std::vector<char*> envp_;
188 char*** old_argv_ptr_;
189 char*** old_env_ptr_;
args(int &argc, char **&argv, char **&env)
Definition: args.hpp:71
args is a class that temporarily replaces standard main() function arguments with their equal,...
Definition: args.hpp:57
size_t strlen(const Char *s)
Definition: convert.hpp:26
args(int &argc, char **&argv)
Definition: args.hpp:63
output_char * convert(const input_char *input)
Definition: stackstring.hpp:92
output_char * get()
Return the converted, NULL-terminated string or NULL if no string was converted.
Definition: stackstring.hpp:127
basic_stackstring< char, wchar_t, 256 > stackstring
Definition: stackstring.hpp:199
~args()
Definition: args.hpp:81