715 return;
716 }
717
722
723
724
725
726
727 std::string_view fullPath;
728 std::string_view fullQuery;
730
731
732
733
734
735 std::string fullQueryCopy;
736 if (!fullQuery.empty()) {
737 fullQueryCopy.assign(fullQuery.begin(), fullQuery.end());
738 }
739
740
741 const std::size_t cl = std::min<std::size_t>(consumedLength, fullPath.size());
742 std::string_view consumed = fullPath.substr(0, cl);
743 const std::string_view remainder = (fullPath.size() > cl) ? fullPath.substr(cl) : std::string_view{};
744
745
747 if (consumed.size() == 1 && consumed[0] == '/') {
748 consumed = {};
749 }
751
752
753 std::string remPath;
754 if (remainder.empty()) {
755 remPath = "/";
756 } else if (remainder.front() == '/') {
757 remPath.assign(remainder.begin(), remainder.end());
758 } else {
759 remPath = "/";
760 remPath.append(remainder.begin(), remainder.end());
761 }
762
765 if (!fullQueryCopy.empty()) {
766 req.
url.push_back(
'?');
767 req.
url.append(fullQueryCopy);
768 }
769 }
std::string backupBaseUrl_
std::string joinMountPath(std::string_view parentMountPath, std::string_view relativeMountPath)
void splitPathAndQuery(std::string_view url, std::string_view &path, std::string_view &query)
std::string_view trimOneTrailingSlash(std::string_view s)