summaryrefslogtreecommitdiff
path: root/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp')
-rw-r--r--src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp b/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp
new file mode 100644
index 00000000000..e1a686ce835
--- /dev/null
+++ b/src/third_party/boost/libs/filesystem/v3/test/windows_attributes.cpp
@@ -0,0 +1,108 @@
+// windows_attributes ----------------------------------------------------------------//
+
+// Copyright Beman Dawes 2010
+
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+// Library home page: http://www.boost.org/libs/filesystem
+
+//--------------------------------------------------------------------------------------//
+
+// Useful for debugging status related issues //
+
+//--------------------------------------------------------------------------------------//
+
+#include <boost/filesystem.hpp>
+#include <boost/detail/lightweight_main.hpp>
+#include <windows.h>
+#include <map>
+#include <utility>
+#include <iostream>
+#include <string>
+
+using std::make_pair;
+namespace fs = boost::filesystem;
+
+int cpp_main( int argc, char* argv[])
+{
+ typedef std::map<DWORD, std::string> decode_type;
+ decode_type table;
+
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ARCHIVE, "FILE_ATTRIBUTE_ARCHIVE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_COMPRESSED, "FILE_ATTRIBUTE_COMPRESSED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DEVICE, "FILE_ATTRIBUTE_DEVICE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_DIRECTORY, "FILE_ATTRIBUTE_DIRECTORY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_ENCRYPTED, "FILE_ATTRIBUTE_ENCRYPTED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_HIDDEN, "FILE_ATTRIBUTE_HIDDEN"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, "FILE_ATTRIBUTE_NOT_CONTENT_INDEXED"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_OFFLINE, "FILE_ATTRIBUTE_OFFLINE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_READONLY, "FILE_ATTRIBUTE_READONLY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_REPARSE_POINT, "FILE_ATTRIBUTE_REPARSE_POINT"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SPARSE_FILE, "FILE_ATTRIBUTE_SPARSE_FILE"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_SYSTEM, "FILE_ATTRIBUTE_SYSTEM"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_TEMPORARY, "FILE_ATTRIBUTE_TEMPORARY"));
+ table.insert(make_pair<DWORD, std::string>(FILE_ATTRIBUTE_VIRTUAL, "FILE_ATTRIBUTE_VIRTUAL"));
+
+ if (argc < 2)
+ {
+ std::cout << "Usage: windows_attributes path\n";
+ return 1;
+ }
+
+ // report Win32 ::GetFileAttributesA()
+
+ DWORD at(::GetFileAttributesA(argv[1]));
+ if (at == INVALID_FILE_ATTRIBUTES)
+ {
+ std::cout << "GetFileAttributes(\"" << argv[1]
+ << "\") returned INVALID_FILE_ATTRIBUTES\n";
+ return 0;
+ }
+
+ std::cout << "GetFileAttributes(\"" << argv[1]
+ << "\") returned ";
+
+ bool bar = false;
+ for (decode_type::iterator it = table.begin(); it != table.end(); ++it)
+ {
+ if (!(it->first & at))
+ continue;
+ if (bar)
+ std::cout << " | ";
+ bar = true;
+ std::cout << it->second;
+ at &= ~it->first;
+ }
+ std::cout << std::endl;
+
+ if (at)
+ std::cout << "plus unknown attributes " << at << std::endl;
+
+ // report Boost Filesystem file_type
+
+ fs::file_status stat = fs::status(argv[1]);
+
+ const char* types[] =
+ {
+ "status_error",
+ "file_not_found",
+ "regular_file",
+ "directory_file",
+ // the following may not apply to some operating systems or file systems
+ "symlink_file",
+ "block_file",
+ "character_file",
+ "fifo_file",
+ "socket_file",
+ "reparse_file", // Windows: FILE_ATTRIBUTE_REPARSE_POINT that is not a symlink
+ "type_unknown", // file does exist", but isn't one of the above types or
+ // we don't have strong enough permission to find its type
+
+ "_detail_directory_symlink" // internal use only; never exposed to users
+ };
+
+ std::cout << "boost::filesystem::status().type() is " << types[stat.type()] << std::endl;
+
+ return 0;
+}