aboutsummaryrefslogtreecommitdiff
path: root/cutl/fs
diff options
context:
space:
mode:
Diffstat (limited to 'cutl/fs')
-rw-r--r--cutl/fs/path.hxx10
-rw-r--r--cutl/fs/path.ixx9
-rw-r--r--cutl/fs/path.txx20
3 files changed, 38 insertions, 1 deletions
diff --git a/cutl/fs/path.hxx b/cutl/fs/path.hxx
index d96644e..cbe71a6 100644
--- a/cutl/fs/path.hxx
+++ b/cutl/fs/path.hxx
@@ -80,7 +80,6 @@ namespace cutl
}
};
-
template <typename C>
class invalid_basic_path;
@@ -275,6 +274,15 @@ namespace cutl
return path_;
}
+ // If possible, return a POSIX representation of the path. For example,
+ // for a Windows path in the form foo\bar this function will return
+ // foo/bar. If it is not possible to create a POSIX representation for
+ // this path (e.g., c:\foo), this function will throw the invalid_path
+ // exception.
+ //
+ string_type
+ posix_string () const;
+
private:
void
init ();
diff --git a/cutl/fs/path.ixx b/cutl/fs/path.ixx
index 38a486d..80d3bb3 100644
--- a/cutl/fs/path.ixx
+++ b/cutl/fs/path.ixx
@@ -43,6 +43,15 @@ namespace cutl
return *this;
}
+#ifndef _WIN32
+ template <typename C>
+ inline typename basic_path<C>::string_type basic_path<C>::
+ posix_string () const
+ {
+ return string ();
+ }
+#endif
+
#ifdef _WIN32
template <>
inline char basic_path<char>::
diff --git a/cutl/fs/path.txx b/cutl/fs/path.txx
index f7cdcc4..e95c890 100644
--- a/cutl/fs/path.txx
+++ b/cutl/fs/path.txx
@@ -64,6 +64,26 @@ namespace cutl
return *this;
}
+#ifdef _WIN32
+ template <typename C>
+ typename basic_path<C>::string_type basic_path<C>::
+ posix_string () const
+ {
+ if (absolute ())
+ throw invalid_basic_path<C> (path_);
+
+ string_type r (path_);
+
+ // Translate Windows-style separators to the POSIX ones.
+ //
+ for (size_type i (0), n (r.size ()); i != n; ++i)
+ if (r[i] == '\\')
+ r[i] = '/';
+
+ return r;
+ }
+#endif
+
template <typename C>
basic_path<C>& basic_path<C>::
operator/= (basic_path<C> const& r)