From 96413b16046f2edbb53ab7abcca73809f6cb3a54 Mon Sep 17 00:00:00 2001 From: Denis Krjuchkov Date: Tue, 3 Dec 2013 13:46:05 +0600 Subject: fs/Traits.hxx: implement BuildFS() method --- src/fs/Traits.cxx | 25 +++++++++++++++++++++++++ src/fs/Traits.hxx | 10 ++++++++++ 2 files changed, 35 insertions(+) (limited to 'src') diff --git a/src/fs/Traits.cxx b/src/fs/Traits.cxx index 2c3ce075b..aaf0a59e1 100644 --- a/src/fs/Traits.cxx +++ b/src/fs/Traits.cxx @@ -22,6 +22,31 @@ #include +PathTraits::string +PathTraits::BuildFS(PathTraits::const_pointer a, size_t a_size, + PathTraits::const_pointer b, size_t b_size) +{ + assert(a != nullptr); + assert(b != nullptr); + + if (a_size == 0) + return string(b, b_size); + if (b_size == 0) + return string(a, a_size); + + string result(a, a_size); + + if (!IsSeparatorFS(a[a_size - 1])) + result.push_back(SEPARATOR_FS); + + if (IsSeparatorFS(b[0])) + result.append(b + 1, b_size - 1); + else + result.append(b, b_size); + + return result; +} + const char * PathTraits::GetBaseUTF8(const char *p) { diff --git a/src/fs/Traits.hxx b/src/fs/Traits.hxx index c72f9814a..4eb0f24b9 100644 --- a/src/fs/Traits.hxx +++ b/src/fs/Traits.hxx @@ -86,6 +86,16 @@ struct PathTraits { return strlen(p); } + /** + * Constructs the path from the given components. + * If either of the components is empty string, + * remaining component is returned unchanged. + * If both components are empty strings, empty string is returned. + */ + gcc_pure gcc_nonnull_all + static string BuildFS(const_pointer a, size_t a_size, + const_pointer b, size_t b_size); + /** * Determine the "base" file name of the given UTF-8 path. * The return value points inside the given string. -- cgit v1.2.3