Add status query overloads. Add tests.

This commit is contained in:
Beman
2016-04-16 09:34:55 -04:00
parent 8e45877b72
commit 76e4a2be51
3 changed files with 60 additions and 35 deletions

View File

@@ -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 <boost/config/auto_link.hpp>
#endif // auto-linking disabled
#endif // BOOST_FILESYSTEM3_CONFIG_HPP
#endif // BOOST_FILESYSTEM_CONFIG_HPP

View File

@@ -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);}

View File

@@ -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)
{