]> git.mxchange.org Git - flightgear.git/blobdiff - src/Input/FGDeviceConfigurationMap.cxx
Minor renaming issue.
[flightgear.git] / src / Input / FGDeviceConfigurationMap.cxx
index 431a6fa5ecc47bb73e647ca160adec86b399d00c..b4b6b1baf24d278812efb5990cc3df4e7f0f8bce 100644 (file)
 #  include <config.h>
 #endif
 
-#include <simgear/math/SGMath.hxx>
-
 #include "FGDeviceConfigurationMap.hxx"
 
-#include <plib/ul.h>
-
+#include <simgear/misc/sg_dir.hxx>
 #include <simgear/props/props_io.hxx>
 #include <Main/globals.hxx>
 
+using simgear::PropertyList;
+
 FGDeviceConfigurationMap::FGDeviceConfigurationMap( const char * relative_path, SGPropertyNode_ptr aBase, const char * aChildname ) :
   base(aBase),
   childname(aChildname)
 {
-  SGPath path(globals->get_fg_root());
-  path.append( relative_path );
-
   int index = 1000;
-  scan_dir( path, &index);
+  scan_dir( SGPath(globals->get_fg_home(), relative_path), &index);
+  scan_dir( SGPath(globals->get_fg_root(), relative_path), &index);
 
-  vector<SGPropertyNode_ptr> childNodes = base->getChildren(childname);
+  PropertyList childNodes = base->getChildren(childname);
   for (int k = (int)childNodes.size() - 1; k >= 0; k--) {
     SGPropertyNode *n = childNodes[k];
-    vector<SGPropertyNode_ptr> names = n->getChildren("name");
+    PropertyList names = n->getChildren("name");
     if (names.size() ) // && (n->getChildren("axis").size() || n->getChildren("button").size()))
       for (unsigned int j = 0; j < names.size(); j++)
         (*this)[names[j]->getStringValue()] = n;
@@ -57,29 +54,28 @@ FGDeviceConfigurationMap::FGDeviceConfigurationMap( const char * relative_path,
 
 FGDeviceConfigurationMap::~FGDeviceConfigurationMap()
 {
-  base->removeChildren( childname );
+  // Ensure that the children don't hang around when deleted, as if 
+  // re-created, we need to ensure that the set of names doesn't contain
+  // any unexpected history.
+  base->removeChildren( childname, false );
 }
 
-void FGDeviceConfigurationMap::scan_dir( SGPath & path, int *index)
+void FGDeviceConfigurationMap::scan_dir(const SGPath & path, int *index)
 {
-  ulDir *dir = ulOpenDir(path.c_str());
-  if (dir) {
-    ulDirEnt* dent;
-    while ((dent = ulReadDir(dir)) != 0) {
-      if (dent->d_name[0] == '.')
-        continue;
+  simgear::Dir dir(path);
+  simgear::PathList children = dir.children(simgear::Dir::TYPE_FILE | 
+    simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT);
 
-      SGPath p(path.str());
-      p.append(dent->d_name);
-      scan_dir(p, index);
+  for (unsigned int c=0; c<children.size(); ++c) {
+    SGPath path(children[c]);
+    if (path.isDir()) {
+      scan_dir(path, index);
+    } else if (path.extension() == "xml") {
+      SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str());
+      SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true);
+      readProperties(path.str(), n);
+      n->setStringValue("source", path.c_str());
     }
-    ulCloseDir(dir);
-
-  } else if (path.extension() == "xml") {
-    SG_LOG(SG_INPUT, SG_DEBUG, "Reading joystick file " << path.str());
-    SGPropertyNode_ptr n = base->getChild(childname, (*index)++, true);
-    readProperties(path.str(), n);
-    n->setStringValue("source", path.c_str());
   }
 }