]> git.mxchange.org Git - simgear.git/commitdiff
Tighten up name filters on Unix. Fixes bug 168.
authorJames Turner <zakalawe@mac.com>
Mon, 15 Nov 2010 23:23:40 +0000 (23:23 +0000)
committerJames Turner <zakalawe@mac.com>
Mon, 15 Nov 2010 23:23:40 +0000 (23:23 +0000)
simgear/misc/sg_dir.cxx

index b8a6899119520040db94c7d7ae53febef4af8960..59f96dfa8fb5598693e1192e19db3f061c5379e6 100644 (file)
@@ -106,6 +106,8 @@ PathList Dir::children(int types, const std::string& nameFilter) const
     return result;
   }
   
+  int filterLen = nameFilter.size();
+  
   while (true) {
     struct dirent* entry = readdir(dp);
     if (!entry) {
@@ -144,7 +146,13 @@ PathList Dir::children(int types, const std::string& nameFilter) const
     }
 
     if (!nameFilter.empty()) {
-      if (strstr(entry->d_name, nameFilter.c_str()) == NULL) {
+      int nameLen = strlen(entry->d_name);
+      if (nameLen < filterLen) {
+        continue; // name is shorter than the filter
+      }
+    
+      char* nameSuffix = entry->d_name + (nameLen - filterLen);
+      if (strcmp(nameSuffix, nameFilter.c_str())) {
         continue;
       }
     }