Flutter Engine
paths.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "flutter/fml/paths.h"
6 
7 #include <sstream>
8 
9 #include "flutter/fml/build_config.h"
10 
11 namespace fml {
12 namespace paths {
13 
14 std::string JoinPaths(std::initializer_list<std::string> components) {
15  std::stringstream stream;
16  size_t i = 0;
17  const size_t size = components.size();
18  for (const auto& component : components) {
19  i++;
20  stream << component;
21  if (i != size) {
22 #if OS_WIN
23  stream << "\\";
24 #else // OS_WIN
25  stream << "/";
26 #endif // OS_WIN
27  }
28  }
29  return stream.str();
30 }
31 
32 std::string SanitizeURIEscapedCharacters(const std::string& str) {
33  std::string result;
34  result.reserve(str.size());
35  for (std::string::size_type i = 0; i < str.size(); ++i) {
36  if (str[i] == '%') {
37  if (i > str.size() - 3 || !isxdigit(str[i + 1]) ||
38  !isxdigit(str[i + 2])) {
39  return "";
40  }
41  const std::string hex = str.substr(i + 1, 2);
42  const unsigned char c = strtoul(hex.c_str(), nullptr, 16);
43  if (!c) {
44  return "";
45  }
46  result += c;
47  i += 2;
48  } else {
49  result += str[i];
50  }
51  }
52  return result;
53 }
54 
55 } // namespace paths
56 } // namespace fml
std::string SanitizeURIEscapedCharacters(const std::string &str)
Definition: paths.cc:32
constexpr std::size_t size(T(&array)[N])
Definition: size.h:13
Definition: ascii_trie.cc:9
std::string JoinPaths(std::initializer_list< std::string > components)
Definition: paths.cc:14