| Index: base/files/file_util_win.cc
|
| diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
|
| index d70454df3836a7067f71eecf5a0ae8673376f474..857fd27a56c376af2351af874420265518b1101f 100644
|
| --- a/base/files/file_util_win.cc
|
| +++ b/base/files/file_util_win.cc
|
| @@ -177,9 +177,20 @@ bool CopyDirectory(const FilePath& from_path, const FilePath& to_path,
|
| FilePath real_from_path = MakeAbsoluteFilePath(from_path);
|
| if (real_from_path.empty())
|
| return false;
|
| + // Originally this CopyDirectory() returns false when |to_path| string
|
| + // contains |from_path| string. While this can be that the to_path is within
|
| + // the from_path, e.g., parent-child relationship if they are both folders, it
|
| + // also can be that the two paths are in the same folder, just that one name
|
| + // contains the other, e.g. C:\\JumpListIcon and C:\\JumpListIconOld.
|
| + // We make this function not return false in the latter situation by calling
|
| + // IsParent() function as below. This allows the copy-n-delete code after the
|
| + // "return false" below to execute.
|
| + //
|
| + // The comment added above is in reply to the original comment as in line 166,
|
| + // which is copied below:
|
| + // "This function does not properly handle destinations within the source."
|
| if (real_to_path.value().size() >= real_from_path.value().size() &&
|
| - real_to_path.value().compare(0, real_from_path.value().size(),
|
| - real_from_path.value()) == 0) {
|
| + real_from_path.IsParent(real_to_path)) {
|
| return false;
|
| }
|
|
|
|
|