diff --git a/application/argumentparser.cpp b/application/argumentparser.cpp index e5ebe9a..1372b84 100644 --- a/application/argumentparser.cpp +++ b/application/argumentparser.cpp @@ -4,6 +4,7 @@ #include "./failure.h" #include "../conversion/stringconversion.h" +#include "../conversion/stringbuilder.h" #include "../io/path.h" #include "../io/ansiescapecodes.h" @@ -250,7 +251,7 @@ void ArgumentReader::read(ArgumentVector &args) ++index, ++argv, argDenotation = nullptr; break; case UnknownArgumentBehavior::Fail: - throw Failure("The specified argument \"" + string(*argv) + "\" is unknown and will be ignored."); + throw Failure("The specified argument \"" % string(*argv) + "\" is unknown and will be ignored."); } } } // if(!matchingArg) @@ -1122,10 +1123,10 @@ void ArgumentParser::checkConstraints(const ArgumentVector &args) for(const Argument *arg : args) { const auto occurrences = arg->occurrences(); if(arg->isParentPresent() && occurrences > arg->maxOccurrences()) { - throw Failure("The argument \"" + string(arg->name()) + "\" mustn't be specified more than " + numberToString(arg->maxOccurrences()) + (arg->maxOccurrences() == 1 ? " time." : " times.")); + throw Failure("The argument \"" % string(arg->name()) % "\" mustn't be specified more than " % numberToString(arg->maxOccurrences()) + (arg->maxOccurrences() == 1 ? " time." : " times.")); } if(arg->isParentPresent() && occurrences < arg->minOccurrences()) { - throw Failure("The argument \"" + string(arg->name()) + "\" must be specified at least " + numberToString(arg->minOccurrences()) + (arg->minOccurrences() == 1 ? " time." : " times.")); + throw Failure("The argument \"" % string(arg->name()) % "\" must be specified at least " % numberToString(arg->minOccurrences()) + (arg->minOccurrences() == 1 ? " time." : " times.")); } Argument *conflictingArgument = nullptr; if(arg->isMainArgument()) { @@ -1136,7 +1137,7 @@ void ArgumentParser::checkConstraints(const ArgumentVector &args) conflictingArgument = arg->conflictsWithArgument(); } if(conflictingArgument) { - throw Failure("The argument \"" + string(conflictingArgument->name()) + "\" can not be combined with \"" + arg->name() + "\"."); + throw Failure("The argument \"" % string(conflictingArgument->name()) % "\" can not be combined with \"" + arg->name() + "\"."); } for(size_t i = 0; i != occurrences; ++i) { if(!arg->allRequiredValuesPresent(i)) { diff --git a/chrono/datetime.cpp b/chrono/datetime.cpp index 67a2d78..2f8f10b 100644 --- a/chrono/datetime.cpp +++ b/chrono/datetime.cpp @@ -1,6 +1,7 @@ #include "./datetime.h" #include "../conversion/stringconversion.h" +#include "../conversion/stringbuilder.h" #include #include @@ -168,7 +169,7 @@ std::pair DateTime::fromIsoString(const char *str) } else if(c == '\0') { break; } else { - throw ConversionException(string("unexpected \"") + c + '\"'); + throw ConversionException(string("unexpected \"") % c + '\"'); } } deltaNegative && (*deltaHourIndex = -*deltaHourIndex); diff --git a/io/path.cpp b/io/path.cpp index 15ed782..5ef1484 100644 --- a/io/path.cpp +++ b/io/path.cpp @@ -123,10 +123,10 @@ bool settingsDirectory(std::string &result, std::string applicationDirectoryName } #if defined(PLATFORM_UNIX) || defined(PLATFORM_MAC) if(char *homeDir = getenv("HOME")) { - result = string(homeDir); + result = homeDir; } else { struct passwd *pw = getpwuid(getuid()); - result = string(pw->pw_dir); + result = pw->pw_dir; } struct stat sb; result += "/.config"; @@ -136,7 +136,8 @@ bool settingsDirectory(std::string &result, std::string applicationDirectoryName } } if(!applicationDirectoryName.empty()) { - result += "/" + applicationDirectoryName; + result += '/'; + result += applicationDirectoryName; if(createApplicationDirectory && !(stat(result.c_str(), &sb) == 0 && S_ISDIR(sb.st_mode))) { if(mkdir(result.c_str(), S_IRUSR | S_IWUSR | S_IXUSR) != 0) { return false; @@ -147,7 +148,8 @@ bool settingsDirectory(std::string &result, std::string applicationDirectoryName if(char *appData = getenv("appdata")) { result = appData; if(!applicationDirectoryName.empty()) { - result += "\\" + applicationDirectoryName; + result += '\\'; + result += applicationDirectoryName; if(createApplicationDirectory) { // FIXME: use UTF-16 API to support unicode, or rewrite using fs abstraction lib DWORD ftyp = GetFileAttributesA(result.c_str()); diff --git a/tests/argumentparsertests.cpp b/tests/argumentparsertests.cpp index 793b675..214b5ac 100644 --- a/tests/argumentparsertests.cpp +++ b/tests/argumentparsertests.cpp @@ -1,5 +1,7 @@ #include "./testutils.h" +#include "../conversion/stringbuilder.h" + #include "../application/argumentparser.h" #include "../application/argumentparserprivate.h" #include "../application/failure.h" @@ -17,6 +19,7 @@ using namespace std; using namespace ApplicationUtilities; +using namespace ConversionUtilities; using namespace CPPUNIT_NS; @@ -494,9 +497,9 @@ void ArgumentParserTests::testBashCompletion() // order for file names is not specified const string res(buffer.str()); if(res.find(".mkv") < res.find(".ini")) { - CPPUNIT_ASSERT_EQUAL("COMPREPLY=('" + mkvFilePath + " '\"'\"'with quote'\"'\"'.mkv' '" + iniFilePath + ".ini' ); compopt -o filenames\n", buffer.str()); + CPPUNIT_ASSERT_EQUAL("COMPREPLY=('" % mkvFilePath % " '\"'\"'with quote'\"'\"'.mkv' '" % iniFilePath + ".ini' ); compopt -o filenames\n", buffer.str()); } else { - CPPUNIT_ASSERT_EQUAL("COMPREPLY=('" + iniFilePath + ".ini' '" + mkvFilePath + " '\"'\"'with quote'\"'\"'.mkv' ); compopt -o filenames\n", buffer.str()); + CPPUNIT_ASSERT_EQUAL("COMPREPLY=('" % iniFilePath % ".ini' '" % mkvFilePath + " '\"'\"'with quote'\"'\"'.mkv' ); compopt -o filenames\n", buffer.str()); } // sub arguments diff --git a/tests/testutils.cpp b/tests/testutils.cpp index 35ceb12..30e2c82 100644 --- a/tests/testutils.cpp +++ b/tests/testutils.cpp @@ -202,7 +202,7 @@ string TestApplication::workingCopyPath(const string &name) const // copy file try { origFile.open(testFilePath(name), ios_base::in | ios_base::binary); - string path = m_workingDir + name; + const string path = m_workingDir + name; workingCopy.open(path, ios_base::out | ios_base::binary | ios_base::trunc); workingCopy << origFile.rdbuf(); return path;