From bef5655db43a56d717c7b15599489e327ec36dee Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 18 May 2013 11:32:35 -0700 Subject: Print a sorted list of Qt versions Right now, we're getting a directory order, which is arbitrary. Change-Id: Ia40c62ba9704fcc22504b1282f430e1fb18255d9 Reviewed-by: Frederik Gladhorn --- src/qtchooser/main.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/qtchooser/main.cpp b/src/qtchooser/main.cpp index 22af289..ed1ee8f 100644 --- a/src/qtchooser/main.cpp +++ b/src/qtchooser/main.cpp @@ -50,6 +50,7 @@ #define _CRT_SECURE_NO_WARNINGS #define _POSIX_C_SOURCE 200809L +#include #include #include #include @@ -109,10 +110,11 @@ private: vector searchPaths() const; typedef bool (*VisitFunction)(const string &targetSdk, Sdk &item); - Sdk iterateSdks(const string &targetSdk, VisitFunction visit); + typedef void (*FinishFunction)(const set &seenSdks); + Sdk iterateSdks(const string &targetSdk, VisitFunction visit, FinishFunction finish = 0); Sdk selectSdk(const string &targetSdk); - static bool printSdk(const string &, Sdk &sdk); + static void printSdks(const set &seenNames); static bool matchSdk(const string &targetSdk, Sdk &sdk); }; @@ -131,7 +133,7 @@ int ToolWrapper::printHelp() int ToolWrapper::listVersions() { - iterateSdks(string(), &ToolWrapper::printSdk); + iterateSdks(string(), 0, &ToolWrapper::printSdks); return 0; } @@ -292,7 +294,7 @@ vector ToolWrapper::searchPaths() const return paths; } -Sdk ToolWrapper::iterateSdks(const string &targetSdk, VisitFunction visit) +Sdk ToolWrapper::iterateSdks(const string &targetSdk, VisitFunction visit, FinishFunction finish) { vector paths = searchPaths(); set seenNames; @@ -325,13 +327,16 @@ Sdk ToolWrapper::iterateSdks(const string &targetSdk, VisitFunction visit) sdk.name = d->d_name; sdk.name.resize(fnamelen + 1 - sizeof wantedSuffix); sdk.configFile = path + PATH_SEP + d->d_name; - if (visit(targetSdk, sdk)) + if (visit && visit(targetSdk, sdk)) return sdk; } closedir(dir); } + if (finish) + finish(seenNames); + return Sdk(); } @@ -344,10 +349,14 @@ Sdk ToolWrapper::selectSdk(const string &targetSdk) return matchedSdk; } -bool ToolWrapper::printSdk(const string &, Sdk &sdk) +void ToolWrapper::printSdks(const set &seenNames) { - printf("%s\n", sdk.name.c_str()); - return false; // continue + vector sorted; + copy(seenNames.begin(), seenNames.end(), back_inserter(sorted)); + sort(sorted.begin(), sorted.end()); + vector::const_iterator it = sorted.begin(); + for ( ; it != sorted.end(); ++it) + printf("%s\n", it->c_str()); } bool ToolWrapper::matchSdk(const string &targetSdk, Sdk &sdk) -- cgit v1.2.3