mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
65 lines
1.5 KiB
C++
65 lines
1.5 KiB
C++
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "flutter/fml/paths.h"
|
|
|
|
#include <sstream>
|
|
|
|
#include "flutter/fml/build_config.h"
|
|
|
|
namespace fml {
|
|
namespace paths {
|
|
|
|
std::string JoinPaths(std::initializer_list<std::string> components) {
|
|
std::stringstream stream;
|
|
size_t i = 0;
|
|
const size_t size = components.size();
|
|
for (const auto& component : components) {
|
|
i++;
|
|
stream << component;
|
|
if (i != size) {
|
|
#if FML_OS_WIN
|
|
stream << "\\";
|
|
#else // FML_OS_WIN
|
|
stream << "/";
|
|
#endif // FML_OS_WIN
|
|
}
|
|
}
|
|
return stream.str();
|
|
}
|
|
|
|
std::string SanitizeURIEscapedCharacters(const std::string& str) {
|
|
std::string result;
|
|
result.reserve(str.size());
|
|
for (std::string::size_type i = 0; i < str.size(); ++i) {
|
|
if (str[i] == '%') {
|
|
if (i > str.size() - 3 || !isxdigit(str[i + 1]) ||
|
|
!isxdigit(str[i + 2])) {
|
|
return "";
|
|
}
|
|
const std::string hex = str.substr(i + 1, 2);
|
|
const unsigned char c = strtoul(hex.c_str(), nullptr, 16);
|
|
if (!c) {
|
|
return "";
|
|
}
|
|
result += c;
|
|
i += 2;
|
|
} else {
|
|
result += str[i];
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
std::pair<bool, std::string> GetExecutableDirectoryPath() {
|
|
auto path = GetExecutablePath();
|
|
if (!path.first) {
|
|
return {false, ""};
|
|
}
|
|
return {true, fml::paths::GetDirectoryName(path.second)};
|
|
}
|
|
|
|
} // namespace paths
|
|
} // namespace fml
|