Cleanup: fix more comments/guards (and add check script).
[libdcp.git] / src / filesystem.cc
index 0dd89228eade553360eac89a7c562ab344634d99..428bb0298b881502eded019302193deb4dc06ef0 100644 (file)
@@ -43,6 +43,27 @@ dcp::filesystem::exists(boost::filesystem::path const& path)
 }
 
 
+bool
+dcp::filesystem::exists(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::exists(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
+bool
+dcp::filesystem::is_directory(boost::filesystem::path const& path)
+{
+       return boost::filesystem::is_directory(dcp::filesystem::fix_long_path(path));
+}
+
+
+bool
+dcp::filesystem::is_empty(boost::filesystem::path const& path)
+{
+       return boost::filesystem::is_empty(dcp::filesystem::fix_long_path(path));
+}
+
+
 bool
 dcp::filesystem::is_regular_file(boost::filesystem::path const& path)
 {
@@ -57,6 +78,13 @@ dcp::filesystem::create_directory(boost::filesystem::path const& path)
 }
 
 
+bool
+dcp::filesystem::create_directory(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::create_directory(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
 void
 dcp::filesystem::copy(boost::filesystem::path const& from, boost::filesystem::path const& to)
 {
@@ -71,6 +99,20 @@ dcp::filesystem::copy_file(boost::filesystem::path const& from, boost::filesyste
 }
 
 
+void
+dcp::filesystem::copy_file(boost::filesystem::path const& from, boost::filesystem::path const& to, boost::system::error_code& ec)
+{
+       boost::filesystem::copy_file(dcp::filesystem::fix_long_path(from), dcp::filesystem::fix_long_path(to), ec);
+}
+
+
+void
+dcp::filesystem::copy_file(boost::filesystem::path const& from, boost::filesystem::path const& to, boost::filesystem::copy_option option)
+{
+       boost::filesystem::copy_file(dcp::filesystem::fix_long_path(from), dcp::filesystem::fix_long_path(to), option);
+}
+
+
 bool
 dcp::filesystem::create_directories(boost::filesystem::path const& path)
 {
@@ -78,6 +120,13 @@ dcp::filesystem::create_directories(boost::filesystem::path const& path)
 }
 
 
+bool
+dcp::filesystem::create_directories(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::create_directories(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
 boost::filesystem::path
 dcp::filesystem::absolute(boost::filesystem::path const& path)
 {
@@ -92,6 +141,46 @@ dcp::filesystem::canonical(boost::filesystem::path const& path)
 }
 
 
+boost::filesystem::path
+dcp::filesystem::weakly_canonical(boost::filesystem::path const& path)
+{
+#ifdef DCPOMATIC_HAVE_WEAKLY_CANONICAL
+       return dcp::filesystem::unfix_long_path(boost::filesystem::weakly_canonical(dcp::filesystem::fix_long_path(path)));
+#else
+       boost::filesystem::path complete(boost::filesystem::system_complete(dcp::filesystem::fix_long_path(path)));
+       boost::filesystem::path result;
+       for (auto part: complete) {
+               if (part == "..") {
+                       boost::system::error_code ec;
+                       if (boost::filesystem::is_symlink(result, ec) || result.filename() == "..") {
+                               result /= part;
+                       } else {
+                               result = result.parent_path();
+                       }
+               } else if (part != ".") {
+                       result /= part;
+               }
+       }
+
+       return dcp::filesystem::unfix_long_path(result.make_preferred());
+#endif
+}
+
+
+bool
+dcp::filesystem::remove(boost::filesystem::path const& path)
+{
+       return boost::filesystem::remove(dcp::filesystem::fix_long_path(path));
+}
+
+
+bool
+dcp::filesystem::remove(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::remove(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
 uintmax_t
 dcp::filesystem::remove_all(boost::filesystem::path const& path)
 {
@@ -99,6 +188,13 @@ dcp::filesystem::remove_all(boost::filesystem::path const& path)
 }
 
 
+uintmax_t
+dcp::filesystem::remove_all(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::remove_all(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
 uintmax_t
 dcp::filesystem::file_size(boost::filesystem::path const& path)
 {
@@ -106,6 +202,13 @@ dcp::filesystem::file_size(boost::filesystem::path const& path)
 }
 
 
+uintmax_t
+dcp::filesystem::file_size(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::file_size(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
 boost::filesystem::path
 dcp::filesystem::current_path()
 {
@@ -127,6 +230,77 @@ dcp::filesystem::create_hard_link(boost::filesystem::path const& from, boost::fi
 }
 
 
+void
+dcp::filesystem::create_hard_link(boost::filesystem::path const& from, boost::filesystem::path const& to, boost::system::error_code& ec)
+{
+       boost::filesystem::create_hard_link(dcp::filesystem::fix_long_path(from), dcp::filesystem::fix_long_path(to), ec);
+}
+
+
+void
+dcp::filesystem::create_symlink(boost::filesystem::path const& from, boost::filesystem::path const& to, boost::system::error_code& ec)
+{
+       boost::filesystem::create_symlink(dcp::filesystem::fix_long_path(from), dcp::filesystem::fix_long_path(to), ec);
+}
+
+
+std::string
+dcp::filesystem::extension(boost::filesystem::path const& path)
+{
+       return boost::filesystem::extension(dcp::filesystem::fix_long_path(path));
+}
+
+
+boost::filesystem::space_info
+dcp::filesystem::space(boost::filesystem::path const& path)
+{
+       return boost::filesystem::space(dcp::filesystem::fix_long_path(path));
+}
+
+
+std::time_t
+dcp::filesystem::last_write_time(boost::filesystem::path const& path)
+{
+       return boost::filesystem::last_write_time(dcp::filesystem::fix_long_path(path));
+}
+
+
+std::time_t
+dcp::filesystem::last_write_time(boost::filesystem::path const& path, boost::system::error_code& ec)
+{
+       return boost::filesystem::last_write_time(dcp::filesystem::fix_long_path(path), ec);
+}
+
+
+uintmax_t
+dcp::filesystem::hard_link_count(boost::filesystem::path const& path)
+{
+       return boost::filesystem::hard_link_count(dcp::filesystem::fix_long_path(path));
+}
+
+
+void
+dcp::filesystem::rename(boost::filesystem::path const& old_path, boost::filesystem::path const& new_path)
+{
+       boost::filesystem::rename(dcp::filesystem::fix_long_path(old_path), dcp::filesystem::fix_long_path(new_path));
+}
+
+
+void
+dcp::filesystem::rename(boost::filesystem::path const& old_path, boost::filesystem::path const& new_path, boost::system::error_code& ec)
+{
+       boost::filesystem::rename(dcp::filesystem::fix_long_path(old_path), dcp::filesystem::fix_long_path(new_path), ec);
+}
+
+
+/* We don't really need this but let's add it for completeness */
+boost::filesystem::path
+dcp::filesystem::change_extension(boost::filesystem::path const& path, std::string const& new_extension)
+{
+       return boost::filesystem::change_extension(path, new_extension);
+}
+
+
 #ifdef DCPOMATIC_WINDOWS
 
 dcp::filesystem::directory_iterator::directory_iterator(boost::filesystem::path const& path)
@@ -136,6 +310,13 @@ dcp::filesystem::directory_iterator::directory_iterator(boost::filesystem::path
 }
 
 
+dcp::filesystem::directory_iterator::directory_iterator(boost::filesystem::path const& path, boost::system::error_code& ec)
+       : _wrapped(dcp::filesystem::fix_long_path(path), ec)
+{
+
+}
+
+
 boost::filesystem::path
 dcp::filesystem::directory_entry::path() const
 {
@@ -164,6 +345,13 @@ dcp::filesystem::directory_iterator::directory_iterator(boost::filesystem::path
 }
 
 
+dcp::filesystem::directory_iterator::directory_iterator(boost::filesystem::path const& path, boost::system::error_code& ec)
+       : _wrapped(path, ec)
+{
+
+}
+
+
 boost::filesystem::path
 dcp::filesystem::directory_entry::path() const
 {
@@ -204,10 +392,18 @@ dcp::filesystem::directory_iterator::operator++()
 dcp::filesystem::directory_entry
 dcp::filesystem::directory_iterator::operator*() const
 {
-       return dcp::filesystem::directory_entry(*_wrapped);
+       _entry = dcp::filesystem::directory_entry(*_wrapped);
+       return _entry;
 }
 
 
+dcp::filesystem::directory_entry*
+dcp::filesystem::directory_iterator::operator->() const
+{
+       _entry = dcp::filesystem::directory_entry(_wrapped->path());
+       return &_entry;
+}
+
 bool
 dcp::filesystem::directory_iterator::operator!=(dcp::filesystem::directory_iterator const& other) const
 {