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 #include "base/files/file_path.h" | 5 #include "base/files/file_path.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 return (codepoint1 < codepoint2) ? -1 : 1; | 1185 return (codepoint1 < codepoint2) ? -1 : 1; |
1186 if (codepoint1 == 0) { | 1186 if (codepoint1 == 0) { |
1187 DCHECK_EQ(index1, length1); | 1187 DCHECK_EQ(index1, length1); |
1188 DCHECK_EQ(index2, length2); | 1188 DCHECK_EQ(index2, length2); |
1189 return 0; | 1189 return 0; |
1190 } | 1190 } |
1191 } | 1191 } |
1192 } | 1192 } |
1193 | 1193 |
1194 StringType FilePath::GetHFSDecomposedForm(StringPieceType string) { | 1194 StringType FilePath::GetHFSDecomposedForm(StringPieceType string) { |
| 1195 StringType result; |
1195 ScopedCFTypeRef<CFStringRef> cfstring( | 1196 ScopedCFTypeRef<CFStringRef> cfstring( |
1196 CFStringCreateWithBytesNoCopy( | 1197 CFStringCreateWithBytesNoCopy( |
1197 NULL, | 1198 NULL, |
1198 reinterpret_cast<const UInt8*>(string.data()), | 1199 reinterpret_cast<const UInt8*>(string.data()), |
1199 string.length(), | 1200 string.length(), |
1200 kCFStringEncodingUTF8, | 1201 kCFStringEncodingUTF8, |
1201 false, | 1202 false, |
1202 kCFAllocatorNull)); | 1203 kCFAllocatorNull)); |
1203 // Query the maximum length needed to store the result. In most cases this | 1204 if (cfstring) { |
1204 // will overestimate the required space. The return value also already | 1205 // Query the maximum length needed to store the result. In most cases this |
1205 // includes the space needed for a terminating 0. | 1206 // will overestimate the required space. The return value also already |
1206 CFIndex length = CFStringGetMaximumSizeOfFileSystemRepresentation(cfstring); | 1207 // includes the space needed for a terminating 0. |
1207 DCHECK_GT(length, 0); // should be at least 1 for the 0-terminator. | 1208 CFIndex length = CFStringGetMaximumSizeOfFileSystemRepresentation(cfstring); |
1208 // Reserve enough space for CFStringGetFileSystemRepresentation to write into. | 1209 DCHECK_GT(length, 0); // should be at least 1 for the 0-terminator. |
1209 // Also set the length to the maximum so that we can shrink it later. | 1210 // Reserve enough space for CFStringGetFileSystemRepresentation to write |
1210 // (Increasing rather than decreasing it would clobber the string contents!) | 1211 // into. Also set the length to the maximum so that we can shrink it later. |
1211 StringType result; | 1212 // (Increasing rather than decreasing it would clobber the string contents!) |
1212 result.reserve(length); | 1213 result.reserve(length); |
1213 result.resize(length - 1); | 1214 result.resize(length - 1); |
1214 Boolean success = CFStringGetFileSystemRepresentation(cfstring, | 1215 Boolean success = CFStringGetFileSystemRepresentation(cfstring, |
1215 &result[0], | 1216 &result[0], |
1216 length); | 1217 length); |
1217 if (success) { | 1218 if (success) { |
1218 // Reduce result.length() to actual string length. | 1219 // Reduce result.length() to actual string length. |
1219 result.resize(strlen(result.c_str())); | 1220 result.resize(strlen(result.c_str())); |
1220 } else { | 1221 } else { |
1221 // An error occurred -> clear result. | 1222 // An error occurred -> clear result. |
1222 result.clear(); | 1223 result.clear(); |
| 1224 } |
1223 } | 1225 } |
1224 return result; | 1226 return result; |
1225 } | 1227 } |
1226 | 1228 |
1227 int FilePath::CompareIgnoreCase(StringPieceType string1, | 1229 int FilePath::CompareIgnoreCase(StringPieceType string1, |
1228 StringPieceType string2) { | 1230 StringPieceType string2) { |
1229 // Quick checks for empty strings - these speed things up a bit and make the | 1231 // Quick checks for empty strings - these speed things up a bit and make the |
1230 // following code cleaner. | 1232 // following code cleaner. |
1231 if (string1.empty()) | 1233 if (string1.empty()) |
1232 return string2.empty() ? 0 : -1; | 1234 return string2.empty() ? 0 : -1; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 #endif | 1323 #endif |
1322 } | 1324 } |
1323 | 1325 |
1324 #if defined(OS_ANDROID) | 1326 #if defined(OS_ANDROID) |
1325 bool FilePath::IsContentUri() const { | 1327 bool FilePath::IsContentUri() const { |
1326 return StartsWith(path_, "content://", base::CompareCase::INSENSITIVE_ASCII); | 1328 return StartsWith(path_, "content://", base::CompareCase::INSENSITIVE_ASCII); |
1327 } | 1329 } |
1328 #endif | 1330 #endif |
1329 | 1331 |
1330 } // namespace base | 1332 } // namespace base |
OLD | NEW |