void FileTreeWalker::traverseArgv(const StringArray &a, FileNameHandler &nameHandler, bool recurse) { // static StringHashMap<IndexedStringArray> dirMap; int arrayIndex = 0; for(size_t i = 0; i < a.size(); i++) { String name = a[i]; if(name[name.length()-1] == '\\') { name = left(name,name.length()-1); } if(hasWildCard(name)) { FileNameSplitter info(name); String path = toLowerCase(info.getDrive() + info.getDir()); String wildCard = toLowerCase(info.getFileName() + info.getExtension()); IndexedStringArray *wcArray = dirMap.get(path); if(wcArray == NULL) { IndexedStringArray ia(path, arrayIndex++, true); ia.add(wildCard); dirMap.put(path,ia); } else { wcArray->add(wildCard); } } else { // no wildCards struct _stat st; if(stat(name,st) < 0) { continue; } dirMap.put(name,IndexedStringArray(name, arrayIndex++, (st.st_mode & _S_IFDIR) ? true : false)); } } CompactArray<IndexedStringArray*> a1; for(Iterator<IndexedStringArray> it = dirMap.values().getIterator(); it.hasNext();) { a1.add(&it.next()); } a1.sort(compareByIndex); for(size_t i = 0; i < a1.size(); i++) { const IndexedStringArray *ia = a1[i]; if(ia->isDir()) { handleDir(ia->getPath(), nameHandler, *ia, recurse); } else { handleSingleFile(ia->getPath(), nameHandler); } } }