diff options
author | KWSys Robot <kwrobot@kitware.com> | 2013-12-19 15:01:48 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2013-12-20 19:27:32 (GMT) |
commit | 7aa3c2015f773d9b9433ca72242d03470c461c27 (patch) | |
tree | 486fdbd72875a7106009b16700a80064baffc634 /EncodingCXX.cxx | |
parent | f788d9a1b27efc9b463b1174a93e780bef00a5d9 (diff) | |
download | CMake-7aa3c2015f773d9b9433ca72242d03470c461c27.zip CMake-7aa3c2015f773d9b9433ca72242d03470c461c27.tar.gz CMake-7aa3c2015f773d9b9433ca72242d03470c461c27.tar.bz2 |
KWSys 2013-12-19 (2426b57d)
Extract upstream KWSys using the following shell commands.
$ git archive --prefix=upstream-kwsys/ 2426b57d | tar x
$ git shortlog --no-merges --abbrev=8 --format='%h %s' 88165c5e..2426b57d
Clinton Stimpson (1):
2426b57d Encoding: Add support for program arguments argc/argv.
Change-Id: Id1fbc042a093b1de398753ffa16d4f9449e99423
Diffstat (limited to 'EncodingCXX.cxx')
-rw-r--r-- | EncodingCXX.cxx | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/EncodingCXX.cxx b/EncodingCXX.cxx index aebc148..f76deb5 100644 --- a/EncodingCXX.cxx +++ b/EncodingCXX.cxx @@ -29,6 +29,7 @@ #endif #include <stdlib.h> +#include <string.h> #ifdef _MSC_VER # pragma warning (disable: 4786) @@ -42,6 +43,98 @@ namespace KWSYS_NAMESPACE { +Encoding::CommandLineArguments +Encoding::CommandLineArguments::Main(int argc, char const* const* argv) +{ +#ifdef _WIN32 + (void) argc; + (void) argv; + + int ac; + LPWSTR* w_av = CommandLineToArgvW(GetCommandLineW(), &ac); + + std::vector<std::string> av1(ac); + std::vector<char const*> av2(ac); + for(int i=0; i<ac; i++) + { + av1[i] = ToNarrow(w_av[i]); + av2[i] = av1[i].c_str(); + } + LocalFree(w_av); + return CommandLineArguments(ac, &av2[0]); +#else + return CommandLineArguments(argc, argv); +#endif +} + +Encoding::CommandLineArguments::CommandLineArguments(int ac, + char const* const* av) +{ + this->argv_.resize(ac+1); + for(int i=0; i<ac; i++) + { + this->argv_[i] = strdup(av[i]); + } + this->argv_[ac] = 0; +} + +Encoding::CommandLineArguments::CommandLineArguments(int ac, + wchar_t const* const* av) +{ + this->argv_.resize(ac+1); + for(int i=0; i<ac; i++) + { + this->argv_[i] = kwsysEncoding_DupToNarrow(av[i]); + } + this->argv_[ac] = 0; +} + +Encoding::CommandLineArguments::~CommandLineArguments() +{ + for(size_t i=0; i<this->argv_.size(); i++) + { + free(argv_[i]); + } +} + +Encoding::CommandLineArguments:: + CommandLineArguments(const CommandLineArguments& other) +{ + this->argv_.resize(other.argv_.size()); + for(size_t i=0; i<this->argv_.size(); i++) + { + this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0; + } +} + +Encoding::CommandLineArguments& +Encoding::CommandLineArguments::operator=(const CommandLineArguments& other) +{ + size_t i; + for(i=0; i<this->argv_.size(); i++) + { + free(this->argv_[i]); + } + + this->argv_.resize(other.argv_.size()); + for(i=0; i<this->argv_.size(); i++) + { + this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0; + } + + return *this; +} + +int Encoding::CommandLineArguments::argc() const +{ + return static_cast<int>(this->argv_.size() - 1); +} + +char const* const* Encoding::CommandLineArguments::argv() const +{ + return &this->argv_[0]; +} + #if KWSYS_STL_HAS_WSTRING kwsys_stl::wstring Encoding::ToWide(const kwsys_stl::string& str) |