mirror of
https://github.com/boostorg/filesystem.git
synced 2026-01-31 08:12:08 +00:00
Add status query overloads. Add tests.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user