From 900a4504d6045071b9bd48bcea206f633f08c681 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 17 Dec 2016 15:57:42 +0200 Subject: Change path::extension() to return std::string, not C string The old behaviour (sometimes useful) is provided by extension_cstring(). --- butl/path | 14 ++++++++++---- butl/path.ixx | 13 ++++++++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/butl/path b/butl/path index 726bbe6..064c8aa 100644 --- a/butl/path +++ b/butl/path @@ -702,13 +702,19 @@ namespace butl basic_path base () const; - // Return the extension or NULL if not present. If not NULL, then - // the result points to the character past the dot but it is legal - // to decrement it once to obtain the value with the dot. + // Return the extension or NULL if not present. If not empty, then the + // result starts with the character past the dot. // - const C* + string_type extension () const; + // Return the in-place pointer to extension or NULL if not present. If not + // NULL, then the result points to the character past the dot but it is + // legal to decrement it once to obtain the value with the dot. + // + const C* + extension_cstring () const; + // Return a path relative to the specified path that is equivalent // to *this. Throws invalid_path if a relative path cannot be derived // (e.g., paths are on different drives on Windows). diff --git a/butl/path.ixx b/butl/path.ixx index b1212f4..9705b66 100644 --- a/butl/path.ixx +++ b/butl/path.ixx @@ -304,11 +304,22 @@ namespace butl } template - inline const C* basic_path:: + inline typename basic_path::string_type basic_path:: extension () const { const string_type& s (this->path_); size_type p (traits::find_extension (s)); + return p != string_type::npos + ? string_type (s.c_str () + p + 1) + : string_type (); + } + + template + inline const C* basic_path:: + extension_cstring () const + { + const string_type& s (this->path_); + size_type p (traits::find_extension (s)); return p != string_type::npos ? s.c_str () + p + 1 : nullptr; } -- cgit v1.1