diff options
Diffstat (limited to 'tests/wildcard/driver.cxx')
-rw-r--r-- | tests/wildcard/driver.cxx | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/tests/wildcard/driver.cxx b/tests/wildcard/driver.cxx index cecee07..f5fb346 100644 --- a/tests/wildcard/driver.cxx +++ b/tests/wildcard/driver.cxx @@ -48,8 +48,8 @@ int _CRT_glob = 0; // Usages: // // argv[0] -mn <pattern> <name> -// argv[0] -sd [-n] <pattern> [<dir>] -// argv[0] -sp [-n] <pattern> <path> [<dir>] +// argv[0] -sd [-i] [-n] <pattern> [<dir>] +// argv[0] -sp [-i] [-n] <pattern> <path> [<dir>] // // Execute actions specified by the first option. Exit with code 0 if succeed, // 1 if fail, 2 on the underlying OS error (print error description to STDERR). @@ -73,6 +73,11 @@ int _CRT_glob = 0; // through contains only the specified entry. The start directory is used if // the first pattern component is a self-matching wildcard. // +// -i +// Pass psflags::ignorable_components to the match/search functions. +// Meaningful in combination with -sd or -sp options and must follow it, if +// specified in the command line. +// // -n // Do not sort paths found. Meaningful in combination with -sd or -sp // options and must follow it, if specified in the command line. @@ -100,12 +105,16 @@ try assert (argc >= (op == "-sd" ? 3 : 4)); bool sort (true); + path_match_flags flags (path_match_flags::follow_symlinks); + int i (2); for (; i != argc; ++i) { string o (argv[i]); if (o == "-n") sort = false; + else if (o == "-i") + flags |= path_match_flags::match_absent; else break; // End of options. } @@ -168,9 +177,9 @@ try }; if (!entry) - path_search (pattern, add, start); + path_search (pattern, add, start, flags); else - path_search (pattern, *entry, add, start); + path_search (pattern, *entry, add, start, flags); // It the search succeeds, then test search in the directory tree // represented by each matched path. Otherwise, if the directory tree is @@ -185,13 +194,15 @@ try // size_t match_count (0); - auto check = [&p, &match_count] (path&& pe, const string&, bool inter) + auto check = [&p, &match_count, flags] + (path&& pe, const string&, bool inter) { if (pe == p.first) { if (!inter) ++match_count; - else + else if ((flags & path_match_flags::match_absent) == + path_match_flags::none) // For self-matching the callback is first called in the interim // mode (through the preopen function) with an empty path. // @@ -201,16 +212,16 @@ try return true; }; - path_search (pattern, p.first, check, start); + path_search (pattern, p.first, check, start, flags); assert (match_count == p.second); // Test path match. // - assert (path_match (pattern, p.first, start)); + assert (path_match (pattern, p.first, start, flags)); } } else if (entry) - assert (!path_match (pattern, *entry, start)); + assert (!path_match (pattern, *entry, start, flags)); // Print the found paths. // |