summaryrefslogtreecommitdiffstats
path: root/EncodingCXX.cxx
diff options
context:
space:
mode:
authorKWSys Robot <kwrobot@kitware.com>2013-12-19 15:01:48 (GMT)
committerBrad King <brad.king@kitware.com>2013-12-20 19:27:32 (GMT)
commit7aa3c2015f773d9b9433ca72242d03470c461c27 (patch)
tree486fdbd72875a7106009b16700a80064baffc634 /EncodingCXX.cxx
parentf788d9a1b27efc9b463b1174a93e780bef00a5d9 (diff)
downloadCMake-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.cxx93
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)