OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // File utilities that use the ICU library go in this file. | 5 // File utilities that use the ICU library go in this file. |
6 | 6 |
7 #include "base/i18n/file_util_icu.h" | 7 #include "base/i18n/file_util_icu.h" |
8 | 8 |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/i18n/icu_string_conversions.h" | 10 #include "base/i18n/icu_string_conversions.h" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 }; | 130 }; |
131 | 131 |
132 } // namespace | 132 } // namespace |
133 | 133 |
134 namespace file_util { | 134 namespace file_util { |
135 | 135 |
136 bool IsFilenameLegal(const string16& file_name) { | 136 bool IsFilenameLegal(const string16& file_name) { |
137 return IllegalCharacters::GetInstance()->containsNone(file_name); | 137 return IllegalCharacters::GetInstance()->containsNone(file_name); |
138 } | 138 } |
139 | 139 |
140 void ReplaceIllegalCharactersInPath(FilePath::StringType* file_name, | 140 void ReplaceIllegalCharactersInPath(base::FilePath::StringType* file_name, |
141 char replace_char) { | 141 char replace_char) { |
142 DCHECK(file_name); | 142 DCHECK(file_name); |
143 | 143 |
144 DCHECK(!(IllegalCharacters::GetInstance()->contains(replace_char))); | 144 DCHECK(!(IllegalCharacters::GetInstance()->contains(replace_char))); |
145 | 145 |
146 // Remove leading and trailing whitespace. | 146 // Remove leading and trailing whitespace. |
147 TrimWhitespace(*file_name, TRIM_ALL, file_name); | 147 TrimWhitespace(*file_name, TRIM_ALL, file_name); |
148 | 148 |
149 IllegalCharacters* illegal = IllegalCharacters::GetInstance(); | 149 IllegalCharacters* illegal = IllegalCharacters::GetInstance(); |
150 int cursor = 0; // The ICU macros expect an int. | 150 int cursor = 0; // The ICU macros expect an int. |
(...skipping 22 matching lines...) Expand all Loading... |
173 if (illegal->contains(code_point)) { | 173 if (illegal->contains(code_point)) { |
174 file_name->replace(char_begin, cursor - char_begin, 1, replace_char); | 174 file_name->replace(char_begin, cursor - char_begin, 1, replace_char); |
175 // We just made the potentially multi-byte/word char into one that only | 175 // We just made the potentially multi-byte/word char into one that only |
176 // takes one byte/word, so need to adjust the cursor to point to the next | 176 // takes one byte/word, so need to adjust the cursor to point to the next |
177 // character again. | 177 // character again. |
178 cursor = char_begin + 1; | 178 cursor = char_begin + 1; |
179 } | 179 } |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 bool LocaleAwareCompareFilenames(const FilePath& a, const FilePath& b) { | 183 bool LocaleAwareCompareFilenames(const base::FilePath& a, |
| 184 const base::FilePath& b) { |
184 #if defined(OS_WIN) | 185 #if defined(OS_WIN) |
185 return LocaleAwareComparator::GetInstance()->Compare(a.value().c_str(), | 186 return LocaleAwareComparator::GetInstance()->Compare(a.value().c_str(), |
186 b.value().c_str()) < 0; | 187 b.value().c_str()) < 0; |
187 | 188 |
188 #elif defined(OS_POSIX) | 189 #elif defined(OS_POSIX) |
189 // On linux, the file system encoding is not defined. We assume | 190 // On linux, the file system encoding is not defined. We assume |
190 // SysNativeMBToWide takes care of it. | 191 // SysNativeMBToWide takes care of it. |
191 // | 192 // |
192 // ICU's collator can take strings in OS native encoding. But we convert the | 193 // ICU's collator can take strings in OS native encoding. But we convert the |
193 // strings to UTF-16 ourselves to ensure conversion consistency. | 194 // strings to UTF-16 ourselves to ensure conversion consistency. |
194 // TODO(yuzo): Perhaps we should define SysNativeMBToUTF16? | 195 // TODO(yuzo): Perhaps we should define SysNativeMBToUTF16? |
195 return LocaleAwareComparator::GetInstance()->Compare( | 196 return LocaleAwareComparator::GetInstance()->Compare( |
196 WideToUTF16(base::SysNativeMBToWide(a.value().c_str())), | 197 WideToUTF16(base::SysNativeMBToWide(a.value().c_str())), |
197 WideToUTF16(base::SysNativeMBToWide(b.value().c_str()))) < 0; | 198 WideToUTF16(base::SysNativeMBToWide(b.value().c_str()))) < 0; |
198 #else | 199 #else |
199 #error Not implemented on your system | 200 #error Not implemented on your system |
200 #endif | 201 #endif |
201 } | 202 } |
202 | 203 |
203 void NormalizeFileNameEncoding(FilePath* file_name) { | 204 void NormalizeFileNameEncoding(base::FilePath* file_name) { |
204 #if defined(OS_CHROMEOS) | 205 #if defined(OS_CHROMEOS) |
205 std::string normalized_str; | 206 std::string normalized_str; |
206 if (base::ConvertToUtf8AndNormalize(file_name->BaseName().value(), | 207 if (base::ConvertToUtf8AndNormalize(file_name->BaseName().value(), |
207 base::kCodepageUTF8, | 208 base::kCodepageUTF8, |
208 &normalized_str)) { | 209 &normalized_str)) { |
209 *file_name = file_name->DirName().Append(FilePath(normalized_str)); | 210 *file_name = file_name->DirName().Append(base::FilePath(normalized_str)); |
210 } | 211 } |
211 #endif | 212 #endif |
212 } | 213 } |
213 | 214 |
214 } // namespace | 215 } // namespace |
OLD | NEW |