Commit b6a7a7fa authored by twanvl's avatar twanvl

Case insensitive string compare inside installers

parent 6b548268
...@@ -348,7 +348,7 @@ bool PackageDirectory::actual_install(const InstallablePackage& package, const S ...@@ -348,7 +348,7 @@ bool PackageDirectory::actual_install(const InstallablePackage& package, const S
const Packaged::FileInfos& file_infos = installer.getFileInfos(); const Packaged::FileInfos& file_infos = installer.getFileInfos();
for (Packaged::FileInfos::const_iterator it = file_infos.begin() ; it != file_infos.end() ; ++it) { for (Packaged::FileInfos::const_iterator it = file_infos.begin() ; it != file_infos.end() ; ++it) {
String file = it->first; String file = it->first;
if (!is_substr(file,0,name)) continue; // not the right package if (!is_substr_i(file,0,name)) continue; // not the right package
// correct filename // correct filename
String local_file = install_dir + file.substr(name.length()); String local_file = install_dir + file.substr(name.length());
create_parent_dirs(local_file); create_parent_dirs(local_file);
......
...@@ -370,6 +370,17 @@ bool is_substr(const String& str, size_t pos, const String& cmp) { ...@@ -370,6 +370,17 @@ bool is_substr(const String& str, size_t pos, const String& cmp) {
return is_substr(str, pos, cmp.c_str()); return is_substr(str, pos, cmp.c_str());
} }
bool is_substr_i(const String& str, size_t pos, const Char* cmp) {
for (String::const_iterator it = str.begin() + pos ; *cmp && it < str.end() ; ++cmp, ++it) {
if (toLower(*cmp) != toLower(*it)) return false;
}
return *cmp == _('\0');
}
bool is_substr_i(const String& str, size_t pos, const String& cmp) {
return is_substr_i(str, pos, cmp.c_str());
}
bool cannocial_name_compare(const String& as, const Char* b) { bool cannocial_name_compare(const String& as, const Char* b) {
const Char* a = as.c_str(); const Char* a = as.c_str();
while (true) { while (true) {
......
...@@ -178,6 +178,11 @@ bool is_substr(const String& str, size_t pos, const Char* cmp); ...@@ -178,6 +178,11 @@ bool is_substr(const String& str, size_t pos, const Char* cmp);
/// Return whether str contains the string cmp at position pos /// Return whether str contains the string cmp at position pos
bool is_substr(const String& str, size_t pos, const String& cmp); bool is_substr(const String& str, size_t pos, const String& cmp);
/// Return whether str contains the string cmp at position pos, case insensitive compare
bool is_substr_i(const String& str, size_t pos, const Char* cmp);
/// Return whether str contains the string cmp at position pos, case insensitive compare
bool is_substr_i(const String& str, size_t pos, const String& cmp);
/// Compare two strings for equality, b may contain '_' where a contains ' ' /// Compare two strings for equality, b may contain '_' where a contains ' '
bool cannocial_name_compare(const String& a, const Char* b); bool cannocial_name_compare(const String& a, const Char* b);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment