App: Avoid C string compare

Since we are linking to boost anyway, use boost function for case
insensitive string compare. While there, make affected methods accept
std::string arguments, which simplifies code a bit.
This commit is contained in:
Ladislav Michl
2026-01-26 18:31:04 +01:00
parent 1886bcda00
commit 0831f7e392
5 changed files with 36 additions and 55 deletions

View File

@@ -34,6 +34,7 @@
# define WINVER 0x502 // needed for SetDllDirectory
# include <Windows.h>
# endif
# include <boost/algorithm/string.hpp>
# include <boost/program_options.hpp>
# include <boost/date_time/posix_time/posix_time.hpp>
# include <boost/scope_exit.hpp>
@@ -1339,18 +1340,15 @@ void Application::changeImportModule(const char* filter, const char* oldModuleNa
}
}
std::vector<std::string> Application::getImportModules(const char* extension) const
std::vector<std::string> Application::getImportModules(const std::string& extension) const
{
std::vector<std::string> modules;
for (const auto & it : _mImportTypes) {
const std::vector<std::string>& types = it.types;
for (const auto & jt : types) {
#ifdef __GNUC__
if (strcasecmp(extension, jt.c_str()) == 0)
#else
if (_stricmp(extension, jt.c_str()) == 0)
#endif
if (boost::iequals(extension, jt)) {
modules.push_back(it.module);
}
}
}
@@ -1369,16 +1367,13 @@ std::vector<std::string> Application::getImportModules() const
return modules;
}
std::vector<std::string> Application::getImportTypes(const char* Module) const
std::vector<std::string> Application::getImportTypes(const std::string& Module) const
{
std::vector<std::string> types;
for (const auto & it : _mImportTypes) {
#ifdef __GNUC__
if (strcasecmp(Module,it.module.c_str()) == 0)
#else
if (_stricmp(Module,it.module.c_str()) == 0)
#endif
if (boost::iequals(Module, it.module)) {
types.insert(types.end(), it.types.begin(), it.types.end());
}
}
return types;
@@ -1397,18 +1392,15 @@ std::vector<std::string> Application::getImportTypes() const
return types;
}
std::map<std::string, std::string> Application::getImportFilters(const char* extension) const
std::map<std::string, std::string> Application::getImportFilters(const std::string& extension) const
{
std::map<std::string, std::string> moduleFilter;
for (const auto & it : _mImportTypes) {
const std::vector<std::string>& types = it.types;
for (const auto & jt : types) {
#ifdef __GNUC__
if (strcasecmp(extension,jt.c_str()) == 0)
#else
if (_stricmp(extension,jt.c_str()) == 0)
#endif
if (boost::iequals(extension, jt)) {
moduleFilter[it.filter] = it.module;
}
}
}
@@ -1464,18 +1456,15 @@ void Application::changeExportModule(const char* filter, const char* oldModuleNa
}
}
std::vector<std::string> Application::getExportModules(const char* extension) const
std::vector<std::string> Application::getExportModules(const std::string& extension) const
{
std::vector<std::string> modules;
for (const auto & it : _mExportTypes) {
const std::vector<std::string>& types = it.types;
for (const auto & jt : types) {
#ifdef __GNUC__
if (strcasecmp(extension,jt.c_str()) == 0)
#else
if (_stricmp(extension,jt.c_str()) == 0)
#endif
if (boost::iequals(extension, jt)) {
modules.push_back(it.module);
}
}
}
@@ -1494,16 +1483,13 @@ std::vector<std::string> Application::getExportModules() const
return modules;
}
std::vector<std::string> Application::getExportTypes(const char* Module) const
std::vector<std::string> Application::getExportTypes(const std::string& Module) const
{
std::vector<std::string> types;
for (const auto & it : _mExportTypes) {
#ifdef __GNUC__
if (strcasecmp(Module,it.module.c_str()) == 0)
#else
if (_stricmp(Module,it.module.c_str()) == 0)
#endif
if (boost::iequals(Module, it.module)) {
types.insert(types.end(), it.types.begin(), it.types.end());
}
}
return types;
@@ -1522,18 +1508,15 @@ std::vector<std::string> Application::getExportTypes() const
return types;
}
std::map<std::string, std::string> Application::getExportFilters(const char* extension) const
std::map<std::string, std::string> Application::getExportFilters(const std::string& extension) const
{
std::map<std::string, std::string> moduleFilter;
for (const auto & it : _mExportTypes) {
const std::vector<std::string>& types = it.types;
for (const auto & jt : types) {
#ifdef __GNUC__
if (strcasecmp(extension,jt.c_str()) == 0)
#else
if (_stricmp(extension,jt.c_str()) == 0)
#endif
if (boost::iequals(extension, jt)) {
moduleFilter[it.filter] = it.module;
}
}
}
@@ -2847,8 +2830,7 @@ std::list<std::string> Application::processFiles(const std::list<std::string>& f
}
}
else {
std::string ext = file.extension();
std::vector<std::string> mods = GetApplication().getImportModules(ext.c_str());
std::vector<std::string> mods = GetApplication().getImportModules(file.extension());
if (!mods.empty()) {
std::string escapedstr = Base::Tools::escapedUnicodeFromUtf8(file.filePath().c_str());
escapedstr = Base::Tools::escapeEncodeFilename(escapedstr);
@@ -2905,9 +2887,8 @@ void Application::processCmdLineFiles()
output = Base::Tools::escapeEncodeFilename(output);
const Base::FileInfo fi(output);
const std::string ext = fi.extension();
try {
const std::vector<std::string> mods = GetApplication().getExportModules(ext.c_str());
const std::vector<std::string> mods = GetApplication().getExportModules(fi.extension());
if (!mods.empty()) {
Base::Interpreter().loadModule(mods.front().c_str());
Base::Interpreter().runStringArg("import %s",mods.front().c_str());