716 return;
717 }
718
723
724
725
726
727
728 std::string_view fullPath;
729 std::string_view fullQuery;
731
732
733
734
735
736 std::string fullQueryCopy;
737 if (!fullQuery.empty()) {
738 fullQueryCopy.assign(fullQuery.begin(), fullQuery.end());
739 }
740
741
742 const std::size_t cl = std::min<std::size_t>(consumedLength, fullPath.size());
743 std::string_view consumed = fullPath.substr(0, cl);
744 const std::string_view remainder = (fullPath.size() > cl) ? fullPath.substr(cl) : std::string_view{};
745
746
748 if (consumed.size() == 1 && consumed[0] == '/') {
749 consumed = {};
750 }
752
753
754 std::string remPath;
755 if (remainder.empty()) {
756 remPath = "/";
757 } else if (remainder.front() == '/') {
758 remPath.assign(remainder.begin(), remainder.end());
759 } else {
760 remPath = "/";
761 remPath.append(remainder.begin(), remainder.end());
762 }
763
766 if (!fullQueryCopy.empty()) {
767 req.
url.push_back(
'?');
768 req.
url.append(fullQueryCopy);
769 }
770 }
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)