OLD | NEW |
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008 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/file_path.h" | 5 #include "base/file_path.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 | 7 |
8 // These includes are just for the *Hack functions, and should be removed | 8 // These includes are just for the *Hack functions, and should be removed |
9 // when those functions are removed. | 9 // when those functions are removed. |
10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 | 152 |
153 bool FilePath::operator!=(const FilePath& that) const { | 153 bool FilePath::operator!=(const FilePath& that) const { |
154 #if defined(FILE_PATH_USES_DRIVE_LETTERS) | 154 #if defined(FILE_PATH_USES_DRIVE_LETTERS) |
155 return !EqualDriveLetterCaseInsensitive(this->path_, that.path_); | 155 return !EqualDriveLetterCaseInsensitive(this->path_, that.path_); |
156 #else // defined(FILE_PATH_USES_DRIVE_LETTERS) | 156 #else // defined(FILE_PATH_USES_DRIVE_LETTERS) |
157 return path_ != that.path_; | 157 return path_ != that.path_; |
158 #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) | 158 #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) |
159 } | 159 } |
160 | 160 |
161 bool FilePath::IsParent(const FilePath& child) const { | 161 bool FilePath::IsParent(const FilePath& child) const { |
| 162 return AppendRelativePath(child, NULL); |
| 163 } |
| 164 |
| 165 bool FilePath::AppendRelativePath(const FilePath& child, |
| 166 FilePath* path) const { |
162 std::vector<FilePath::StringType> parent_components; | 167 std::vector<FilePath::StringType> parent_components; |
163 std::vector<FilePath::StringType> child_components; | 168 std::vector<FilePath::StringType> child_components; |
164 GetComponents(&parent_components); | 169 GetComponents(&parent_components); |
165 child.GetComponents(&child_components); | 170 child.GetComponents(&child_components); |
166 | 171 |
167 if (parent_components.size() >= child_components.size()) | 172 if (parent_components.size() >= child_components.size()) |
168 return false; | 173 return false; |
169 if (parent_components.size() == 0) | 174 if (parent_components.size() == 0) |
170 return false; | 175 return false; |
171 | 176 |
(...skipping 15 matching lines...) Expand all Loading... |
187 } | 192 } |
188 #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) | 193 #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) |
189 | 194 |
190 while (parent_comp != parent_components.end()) { | 195 while (parent_comp != parent_components.end()) { |
191 if (*parent_comp != *child_comp) | 196 if (*parent_comp != *child_comp) |
192 return false; | 197 return false; |
193 ++parent_comp; | 198 ++parent_comp; |
194 ++child_comp; | 199 ++child_comp; |
195 } | 200 } |
196 | 201 |
| 202 if (path != NULL) { |
| 203 for (; child_comp != child_components.end(); ++child_comp) { |
| 204 *path = path->Append(*child_comp); |
| 205 } |
| 206 } |
197 return true; | 207 return true; |
198 } | 208 } |
199 | 209 |
200 // libgen's dirname and basename aren't guaranteed to be thread-safe and aren't | 210 // libgen's dirname and basename aren't guaranteed to be thread-safe and aren't |
201 // guaranteed to not modify their input strings, and in fact are implemented | 211 // guaranteed to not modify their input strings, and in fact are implemented |
202 // differently in this regard on different platforms. Don't use them, but | 212 // differently in this regard on different platforms. Don't use them, but |
203 // adhere to their behavior. | 213 // adhere to their behavior. |
204 FilePath FilePath::DirName() const { | 214 FilePath FilePath::DirName() const { |
205 FilePath new_path(path_); | 215 FilePath new_path(path_); |
206 new_path.StripTrailingSeparatorsInternal(); | 216 new_path.StripTrailingSeparatorsInternal(); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 | 479 |
470 std::vector<FilePath::StringType>::const_iterator it = components.begin(); | 480 std::vector<FilePath::StringType>::const_iterator it = components.begin(); |
471 for (; it != components.end(); ++it) { | 481 for (; it != components.end(); ++it) { |
472 const FilePath::StringType& component = *it; | 482 const FilePath::StringType& component = *it; |
473 if (component == kParentDirectory) | 483 if (component == kParentDirectory) |
474 return true; | 484 return true; |
475 } | 485 } |
476 return false; | 486 return false; |
477 } | 487 } |
478 | 488 |
OLD | NEW |