Added ICMPv6 Packet Parser and Unittests for different ICMP Packages.
[senf.git] / Console / Executor.cc
index d5f56fb..5000104 100644 (file)
@@ -249,7 +249,7 @@ senf::console::Executor::traverseNode(ParseCommandInfo::TokensRange const & path
                               boost::prior(path.end())),
                           dir);
         DirectoryNode & base (*dir.back().lock());
-        std::string const & name (boost::prior(path.end())->value());
+        std::string const & name (complete(base, boost::prior(path.end())->value()));
         if (policy_)
             policy_( base, name );
         return dir.back().lock()->get(name);
@@ -281,9 +281,10 @@ senf::console::Executor::traverseDirectory(ParseCommandInfo::TokensRange const &
                 ;
             else {
                 DirectoryNode & base (*dir.back().lock());
+                std::string name (complete(base, i->value()));
                 if (policy_)
-                    policy_( base, i->value() );
-                dir.push_back(base[i->value()].thisptr());
+                    policy_( base, name );
+                dir.push_back(base[name].thisptr());
             }
         }
     }
@@ -295,6 +296,17 @@ senf::console::Executor::traverseDirectory(ParseCommandInfo::TokensRange const &
     }
 }
 
+prefix_ std::string senf::console::Executor::complete(DirectoryNode & dir,
+                                                      std::string const & name)
+{
+    if (! dir.hasChild(name)) {
+        DirectoryNode::ChildrenRange completions (dir.completions(name));
+        if (completions.size() == 1)
+            return completions.begin()->first;
+    }
+    return name;
+}
+
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 //#include "Executor.mpp"