aboutsummaryrefslogtreecommitdiff
path: root/tests/dir-iterator
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-07-09 12:25:47 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-07-09 12:25:47 +0200
commit02af7e788f3fef0dbba0ba49442054fb451f5bdc (patch)
tree5e0295bc0d06579cfffd0df3ad176945c9c51c79 /tests/dir-iterator
parent38c8f0efd8f033be8fb8278aa5d0eb704dedee55 (diff)
Implement directory iteration support
Diffstat (limited to 'tests/dir-iterator')
-rw-r--r--tests/dir-iterator/buildfile7
-rw-r--r--tests/dir-iterator/driver.cxx55
2 files changed, 62 insertions, 0 deletions
diff --git a/tests/dir-iterator/buildfile b/tests/dir-iterator/buildfile
new file mode 100644
index 0000000..fabea4d
--- /dev/null
+++ b/tests/dir-iterator/buildfile
@@ -0,0 +1,7 @@
+# file : tests/dir-iterator/buildfile
+# copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+exe{driver}: cxx{driver} ../../butl/lib{butl}
+
+include ../../butl/
diff --git a/tests/dir-iterator/driver.cxx b/tests/dir-iterator/driver.cxx
new file mode 100644
index 0000000..09a259f
--- /dev/null
+++ b/tests/dir-iterator/driver.cxx
@@ -0,0 +1,55 @@
+// file : tests/dir-iterator/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <cstddef> // size_t
+#include <cassert>
+#include <iostream>
+
+#include <butl/path>
+#include <butl/path-io>
+#include <butl/filesystem>
+
+using namespace std;
+using namespace butl;
+
+static const char* entry_type_string[] =
+{
+ "unk", "reg", "dir", "sym", "oth"
+};
+
+inline ostream&
+operator<< (ostream& os, entry_type e)
+{
+ return os << entry_type_string[static_cast<size_t> (e)];
+}
+
+int
+main (int argc, const char* argv[])
+{
+ if (argc != 2)
+ {
+ cerr << "usage: " << argv[0] << " <dir>" << endl;
+ return 1;
+ }
+
+ try
+ {
+ for (const dir_entry& de: dir_iterator (dir_path (argv[1])))
+ {
+ cerr << de.type () << " ";
+
+ if (de.type () == entry_type::symlink)
+ cerr << de.ltype ();
+ else
+ cerr << " ";
+
+ cerr << " " << de.path () << endl;
+ }
+ }
+ catch (const exception& e)
+ {
+ cerr << argv[1] << ": " << e.what () << endl;
+ return 1;
+ }
+}