From 9826599cb089611f78532e583acb467572868732 Mon Sep 17 00:00:00 2001 From: Ulrich Germann Date: Tue, 10 Nov 2015 23:05:51 +0000 Subject: [PATCH] Enforce const-ness of command line arguments; bug fix in mosesserver.cpp. --- contrib/server/mosesserver.cpp | 13 ++++++------- misc/prunePhraseTable.cpp | 11 ++++++----- moses-cmd/LatticeMBRGrid.cpp | 11 ++++++----- moses-cmd/Main.cpp | 2 +- moses-cmd/MainVW.cpp | 2 +- moses/ExportInterface.cpp | 2 +- moses/ExportInterface.h | 2 +- moses/Parameter.cpp | 11 ++++++----- moses/Parameter.h | 7 ++++--- moses/TranslationModel/UG/ptable-lookup.cc | 2 +- 10 files changed, 33 insertions(+), 30 deletions(-) diff --git a/contrib/server/mosesserver.cpp b/contrib/server/mosesserver.cpp index 5bcb036af..75afd27e2 100644 --- a/contrib/server/mosesserver.cpp +++ b/contrib/server/mosesserver.cpp @@ -10,21 +10,20 @@ // The future is this: /** main function of the command line version of the decoder **/ -int main(int argc, char** argv) +int main(int argc, char const** argv) { // Map double-dash long options back to single-dash long options // as used in legacy moses. for (int i = 1; i < argc; ++i) { - char* a = argv[i]; - if (a[0] == '-' && a[1] == '-') - for (size_t k = 1; (a[k] = a[k+1]); ++k); + if (argv[i][0] == '-' && argv[i][1] == '-') + ++argv[i]; } char const* argv2[argc+1]; - for (int i = 1; i < argc; ++i) + for (int i = 0; i < argc; ++i) argv2[i] = argv[i]; - argv2[argc] = "server"; - return decoder_main(argc, argv); + argv2[argc] = "--server"; + return decoder_main(argc+1, argv2); } #else diff --git a/misc/prunePhraseTable.cpp b/misc/prunePhraseTable.cpp index f6d608bc6..f8ab1084d 100644 --- a/misc/prunePhraseTable.cpp +++ b/misc/prunePhraseTable.cpp @@ -53,7 +53,7 @@ using namespace std; namespace po = boost::program_options; typedef multimap Lines; -static void usage(const po::options_description& desc, char** argv) +static void usage(const po::options_description& desc, char const** argv) { cerr << "Usage: " + string(argv[0]) + " [options] input-file output-file" << endl; cerr << desc << endl; @@ -94,7 +94,7 @@ static void outputTopN(const Phrase& sourcePhrase, const multimap params(new Parameter()); - char** mosesargv = new char*[mosesargs.size()]; + char const** mosesargv = new char const*[mosesargs.size()]; for (size_t i = 0; i < mosesargs.size(); ++i) { - mosesargv[i] = new char[mosesargs[i].length() + 1]; - strcpy(mosesargv[i], mosesargs[i].c_str()); + mosesargv[i] = mosesargs[i].c_str(); + // mosesargv[i] = new char[mosesargs[i].length() + 1]; + // strcpy(mosesargv[i], mosesargs[i].c_str()); } if (!params->LoadParam(mosesargs.size(), mosesargv)) { diff --git a/moses-cmd/LatticeMBRGrid.cpp b/moses-cmd/LatticeMBRGrid.cpp index a8ecf5f00..4d283e559 100644 --- a/moses-cmd/LatticeMBRGrid.cpp +++ b/moses-cmd/LatticeMBRGrid.cpp @@ -76,8 +76,8 @@ public: } /** Parse the arguments, removing those that define the grid and returning a copy of the rest */ - void parseArgs(int& argc, char**& argv) { - char** newargv = new char*[argc+1]; //Space to add mbr parameter + void parseArgs(int& argc, char const**& argv) { + char const** newargv = new char const*[argc+1]; //Space to add mbr parameter int newargc = 0; for (int i = 0; i < argc; ++i) { bool consumed = false; @@ -113,8 +113,9 @@ public: } } if (!consumed) { - newargv[newargc] = new char[strlen(argv[i]) + 1]; - strcpy(newargv[newargc],argv[i]); + // newargv[newargc] = new char[strlen(argv[i]) + 1]; + // strcpy(newargv[newargc],argv[i]); + newargv[newargc] = argv[i]; ++newargc; } } @@ -137,7 +138,7 @@ private: } // namespace -int main(int argc, char* argv[]) +int main(int argc, char const* argv[]) { cerr << "Lattice MBR Grid search" << endl; diff --git a/moses-cmd/Main.cpp b/moses-cmd/Main.cpp index 5ee99e2db..0318d8f4e 100644 --- a/moses-cmd/Main.cpp +++ b/moses-cmd/Main.cpp @@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #include "util/string_stream.hh" /** main function of the command line version of the decoder **/ -int main(int argc, char** argv) +int main(int argc, char const** argv) { return decoder_main(argc, argv); } diff --git a/moses-cmd/MainVW.cpp b/moses-cmd/MainVW.cpp index c8047c201..dbe5b74d6 100644 --- a/moses-cmd/MainVW.cpp +++ b/moses-cmd/MainVW.cpp @@ -74,7 +74,7 @@ void OutputFeatureWeightsForHypergraph(std::ostream &outputSearchGraphStream) } //namespace /** main function of the command line version of the decoder **/ -int main(int argc, char** argv) +int main(int argc, char const** argv) { try { diff --git a/moses/ExportInterface.cpp b/moses/ExportInterface.cpp index 2ad01d56d..0ac1eaed1 100644 --- a/moses/ExportInterface.cpp +++ b/moses/ExportInterface.cpp @@ -289,7 +289,7 @@ batch_run() } /** Called by main function of the command line version of the decoder **/ -int decoder_main(int argc, char** argv) +int decoder_main(int argc, char const** argv) { #ifdef NDEBUG try diff --git a/moses/ExportInterface.h b/moses/ExportInterface.h index 7ed6c0838..f006e6582 100644 --- a/moses/ExportInterface.h +++ b/moses/ExportInterface.h @@ -55,5 +55,5 @@ private: const Moses::StaticData& m_staticData; }; -int decoder_main(int argc, char* argv[]); +int decoder_main(int argc, char const* argv[]); diff --git a/moses/Parameter.cpp b/moses/Parameter.cpp index 183519247..8ab5d7ad2 100644 --- a/moses/Parameter.cpp +++ b/moses/Parameter.cpp @@ -444,17 +444,17 @@ Parameter:: LoadParam(const string &filePath) { const char *argv[] = {"executable", "-f", filePath.c_str() }; - return LoadParam(3, (char**) argv); + return LoadParam(3, (char const**) argv); } /** load all parameters from the configuration file and the command line switches */ bool Parameter:: -LoadParam(int argc, char* xargv[]) +LoadParam(int argc, char const* xargv[]) { // legacy parameter handling: all parameters are expected // to start with a single dash - char* argv[argc+1]; + char const* argv[argc+1]; for (int i = 0; i < argc; ++i) { argv[i] = xargv[i]; if (strlen(argv[i]) > 2 && argv[i][0] == '-' && argv[i][1] == '-') @@ -1330,7 +1330,7 @@ FilesExist(const string ¶mName, int fieldNo, // in moses-cmd string Parameter:: -FindParam(const string ¶mSwitch, int argc, char* argv[]) +FindParam(const string ¶mSwitch, int argc, char const* argv[]) { for (int i = 0 ; i < argc ; i++) { if (string(argv[i]) == paramSwitch) { @@ -1352,7 +1352,8 @@ FindParam(const string ¶mSwitch, int argc, char* argv[]) * \param argv values of paramters on command line */ void Parameter:: -OverwriteParam(const string ¶mSwitch, const string ¶mName, int argc, char* argv[]) +OverwriteParam(const string ¶mSwitch, const string ¶mName, + int argc, char const* argv[]) { int startPos = -1; for (int i = 0 ; i < argc ; i++) { diff --git a/moses/Parameter.h b/moses/Parameter.h index bc3415245..32065885b 100644 --- a/moses/Parameter.h +++ b/moses/Parameter.h @@ -57,8 +57,9 @@ protected: std::map > m_weights; - std::string FindParam(const std::string ¶mSwitch, int argc, char* argv[]); - void OverwriteParam(const std::string ¶mSwitch, const std::string ¶mName, int argc, char* argv[]); + std::string FindParam(const std::string ¶mSwitch, int argc, char const* argv[]); + void OverwriteParam(const std::string ¶mSwitch, const std::string ¶mName, + int argc, char const* argv[]); bool ReadConfigFile(const std::string &filePath ); bool FilesExist(const std::string ¶mName, int fieldNo, std::vector const& fileExtension=std::vector(1,"")); bool isOption(const char* token); @@ -113,7 +114,7 @@ protected: public: Parameter(); ~Parameter(); - bool LoadParam(int argc, char* argv[]); + bool LoadParam(int argc, char const* argv[]); bool LoadParam(const std::string &filePath); void Explain(); diff --git a/moses/TranslationModel/UG/ptable-lookup.cc b/moses/TranslationModel/UG/ptable-lookup.cc index d350d7a3e..88df629a1 100644 --- a/moses/TranslationModel/UG/ptable-lookup.cc +++ b/moses/TranslationModel/UG/ptable-lookup.cc @@ -44,7 +44,7 @@ public: } }; -int main(int argc, char* argv[]) +int main(int argc, char const* argv[]) { Parameter params; if (!params.LoadParam(argc,argv) || !StaticData::LoadDataStatic(¶ms, argv[0]))