{
if (skipping())
return "";
+ (void) cwd(); // ensure, cwd is live.
return "/" + senf::stringJoin(
senf::make_transform_range(
boost::make_iterator_range(boost::next(cwd_.begin()), cwd_.end()),
DirectoryNode::child_iterator const i_end (node.children().end());
for (; i != i_end; ++i) {
output << i->first;
- if (boost::dynamic_pointer_cast<DirectoryNode>(i->second))
+ if (i->second->isDirectory())
output << "/";
+ else if (i->second->isLink())
+ output << "@";
output << "\n";
}
}
return *dir.back().lock();
}
DirectoryNode & base (*dir.back().lock());
- if (tok == WordToken("."))
+ if (tok == WordToken(".") || tok == NoneToken())
return base;
std::string const & name (complete(base, tok.value()));
if (policy_)