diff --git a/include/boost/filesystem/config.hpp b/include/boost/filesystem/config.hpp index 8159769..95c7ad9 100644 --- a/include/boost/filesystem/config.hpp +++ b/include/boost/filesystem/config.hpp @@ -1,4 +1,4 @@ -// boost/filesystem/v3/config.hpp ----------------------------------------------------// +// boost/filesystem/config.hpp -------------------------------------------------------// // Copyright Beman Dawes 2003 @@ -9,8 +9,8 @@ //--------------------------------------------------------------------------------------// -#ifndef BOOST_FILESYSTEM3_CONFIG_HPP -#define BOOST_FILESYSTEM3_CONFIG_HPP +#ifndef BOOST_FILESYSTEM_CONFIG_HPP +#define BOOST_FILESYSTEM_CONFIG_HPP # if defined(BOOST_FILESYSTEM_VERSION) && BOOST_FILESYSTEM_VERSION != 3 # error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3 @@ -107,4 +107,4 @@ #include #endif // auto-linking disabled -#endif // BOOST_FILESYSTEM3_CONFIG_HPP +#endif // BOOST_FILESYSTEM_CONFIG_HPP diff --git a/include/boost/filesystem/operations.hpp b/include/boost/filesystem/operations.hpp index 28bf9cd..adeec9d 100644 --- a/include/boost/filesystem/operations.hpp +++ b/include/boost/filesystem/operations.hpp @@ -352,6 +352,13 @@ namespace boost // directory_entry // //--------------------------------------------------------------------------------------// +#ifdef BOOST_WINDOWS_API +# define BOOST_FILESYSTEM_CACHE_STATUS +# define BOOST_FILESYSTEM_CACHE_SYMLINK_STATUS +# define BOOST_FILESYSTEM_CACHE_FILESIZE +#else +#endif + // TODO: is this really a GCC problem or is it a MSVC 2-phase lookup problem? // GCC has a problem with a member function named path within a namespace or // sub-namespace that also has a class named path. The workaround is to always @@ -541,21 +548,11 @@ public: inline file_status status(const path& p, system::error_code& ec) {return detail::status(p, &ec);} - inline - file_status status(const directory_entry& d) {return d.m_status;} - inline - file_status status(const directory_entry& d, system::error_code& ec) - {ec.clear(); return d.m_status;} inline file_status symlink_status(const path& p) {return detail::symlink_status(p);} inline file_status symlink_status(const path& p, system::error_code& ec) {return detail::symlink_status(p, &ec);} - inline - file_status symlink_status(const directory_entry& d) {return d.m_symlink_status;} - inline - file_status symlink_status(const directory_entry& d, system::error_code& ec) - {ec.clear(); return d.m_symlink_status;} inline bool exists(const path& p) {return exists(detail::status(p));} inline @@ -595,6 +592,25 @@ public: bool is_empty(const path& p, system::error_code& ec) {return detail::is_empty(p, &ec);} +#ifdef BOOST_FILESYSTEM_CACHE_STATUS + inline + file_status status(const directory_entry& d) {return d.m_status;} + inline + bool exists(const directory_entry& d) {return exists(d.m_status);} + inline + bool is_directory(const directory_entry& d) {return is_directory(d.m_status);} + inline + bool is_regular_file(const directory_entry& d) {return is_regular_file(d.m_status);} + inline + bool is_other(const directory_entry& d) {return is_other(d.m_status);} +#endif +#ifdef BOOST_FILESYSTEM_CACHE_SYMLINK_STATUS + inline + file_status symlink_status(const directory_entry& d) {return d.m_symlink_status;} + inline + bool is_symlink(const directory_entry& d) {return is_symlink(d.m_symlink_status);} +#endif + //--------------------------------------------------------------------------------------// // // // operational functions // @@ -727,12 +743,14 @@ public: inline boost::uintmax_t file_size(const path& p) {return detail::file_size(p);} - inline - boost::uintmax_t file_size(const directory_entry& x) {return x.m_file_size;} - inline boost::uintmax_t file_size(const path& p, system::error_code& ec) BOOST_NOEXCEPT {return detail::file_size(p, &ec);} +#ifdef BOOST_FILESYSTEM_CACHE_FILESIZE + inline + boost::uintmax_t file_size(const directory_entry& x) {return x.m_file_size;} +#endif + inline boost::uintmax_t hard_link_count(const path& p) {return detail::hard_link_count(p);} diff --git a/test/operations_unit_test.cpp b/test/operations_unit_test.cpp index f0e1996..798e216 100644 --- a/test/operations_unit_test.cpp +++ b/test/operations_unit_test.cpp @@ -122,24 +122,31 @@ namespace CHECK(!it->path().empty()); - // TODO: fix these: - //if (is_regular_file(it->status())) - //{ - // CHECK(is_regular_file(it->symlink_status())); - // CHECK(!is_directory(it->status())); - // CHECK(!is_symlink(it->status())); - // CHECK(!is_directory(it->symlink_status())); - // CHECK(!is_symlink(it->symlink_status())); - //} - //else - //{ - // CHECK(is_directory(it->status())); - // CHECK(is_directory(it->symlink_status())); - // CHECK(!is_regular_file(it->status())); - // CHECK(!is_regular_file(it->symlink_status())); - // CHECK(!is_symlink(it->status())); - // CHECK(!is_symlink(it->symlink_status())); - //} + if (is_regular_file(it->path())) + { + CHECK(is_regular_file(*it)); + CHECK(is_regular_file(status(*it))); + CHECK(is_regular_file(symlink_status(*it))); + CHECK(!is_directory(status(*it))); + CHECK(!is_symlink(status(*it))); + CHECK(!is_directory(symlink_status(*it))); + CHECK(!is_symlink(symlink_status(*it))); + } + else + { + CHECK(is_directory(*it)); + CHECK(!is_regular_file(*it)); + CHECK(!is_symlink(*it)); + CHECK(is_directory(status(*it))); + CHECK(is_directory(symlink_status(*it))); + CHECK(!is_regular_file(status(*it))); + CHECK(!is_regular_file(symlink_status(*it))); + CHECK(!is_symlink(status(*it))); + CHECK(!is_symlink(symlink_status(*it))); + CHECK(is_directory(*it)); + CHECK(!is_regular_file(*it)); + CHECK(!is_symlink(*it)); + } for (; it != end; ++it) {