diff --git a/src/diag.cpp b/src/diag.cpp index 76fa4fc20..ab9bf9329 100644 --- a/src/diag.cpp +++ b/src/diag.cpp @@ -30,9 +30,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -193,6 +195,51 @@ void handleDiagnostics (std::string& outs) << location.mode () << "\n\n"; + // External commands. + std::cout << "External Utilities\n"; + { + std::vector matches; + char buffer [1024] = {0}; + FILE* fp; + if ((fp = popen ("scp 2>&1", "r"))) + { + fgets (buffer, 1023, fp); + pclose (fp); + + std::cout << " scp: " + << (regexMatch (buffer, "usage") ? "found" : "n/a") + << "\n"; + } + + if ((fp = popen ("rsync --version", "r"))) + { + fgets (buffer, 1023, fp); + pclose (fp); + + // rsync version 2.6.9 protocol version 29 + matches.clear (); + regexMatch (matches, buffer, "version ([0-9]+\\.[0-9]+\\.[0-9]+)"); + std::cout << " rsync: " + << (matches.size () ? matches[0] : "n/a") + << "\n"; + } + + if ((fp = popen ("curl --version", "r"))) + { + fgets (buffer, 1023, fp); + pclose (fp); + + // curl 7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3 + matches.clear (); + regexMatch (matches, buffer, "curl ([0-9]+\\.[0-9]+\\.[0-9]+)"); + std::cout << " curl: " + << (matches.size () ? matches[0] : "n/a") + << "\n"; + } + + std::cout << "\n"; + } + // Generate 1000 UUIDs and verify they are all unique. std::cout << "Tests\n"; {