OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium 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 "chrome/browser/local_discovery/storage/path_util.h" | |
6 | |
7 #include <algorithm> | |
8 | |
9 #include "base/logging.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 | |
12 namespace local_discovery { | |
13 | |
14 namespace { | |
15 | |
16 std::string UnescapeSlashes(const std::string& str) { | |
17 std::string output = ""; | |
18 for (size_t i = 0; i < str.length(); i++) { | |
19 if (str[i] == '$') { | |
20 i++; | |
21 switch (str[i]) { | |
22 case 's': | |
23 output += '/'; | |
24 break; | |
25 case 'b': | |
26 output += '\\'; | |
27 break; | |
28 case '$': | |
29 output += '$'; | |
30 break; | |
31 default: | |
32 NOTREACHED(); | |
33 } | |
34 } else { | |
35 output += str[i]; | |
36 } | |
37 } | |
38 | |
39 return output; | |
40 } | |
41 | |
42 const size_t kNumComponentsInBasePrivetPath = 4; | |
43 const int kIndexOfServiceNameInComponentList = 2; | |
44 | |
45 std::string PathStringToString(const base::FilePath::StringType& string) { | |
46 #if defined(OS_WIN) | |
47 return base::UTF16ToUTF8(string); | |
48 #else | |
49 return string; | |
50 #endif | |
51 } | |
52 | |
53 } // namespace | |
54 | |
55 base::FilePath NormalizeFilePath(const base::FilePath& path) { | |
56 #if defined(OS_WIN) | |
57 base::FilePath::StringType path_updated_string = path.value(); | |
58 | |
59 std::replace(path_updated_string.begin(), | |
60 path_updated_string.end(), | |
61 static_cast<base::FilePath::CharType>('\\'), | |
62 static_cast<base::FilePath::CharType>('/')); | |
63 return base::FilePath(path_updated_string); | |
64 #else | |
65 return path; | |
66 #endif | |
67 } | |
68 | |
69 ParsedPrivetPath::ParsedPrivetPath(const base::FilePath& file_path) { | |
70 std::vector<base::FilePath::StringType> components; | |
71 file_path.GetComponents(&components); | |
72 DCHECK(components.size() >= kNumComponentsInBasePrivetPath); | |
73 service_name = UnescapeSlashes(PathStringToString( | |
74 components[kIndexOfServiceNameInComponentList])); | |
75 | |
76 | |
77 for (size_t i = kNumComponentsInBasePrivetPath; i < components.size(); i++) { | |
78 path += '/' + PathStringToString(components[i]); | |
79 } | |
80 | |
81 if (path.empty()) path = "/"; | |
82 } | |
83 | |
84 ParsedPrivetPath::~ParsedPrivetPath() { | |
85 } | |
86 | |
87 } // namespace local_discovery | |
OLD | NEW |