Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(492)

Side by Side Diff: base/file_util_win.cc

Issue 285803002: Fix DeleteFile of an empty path on Windows XP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/file_util.h" 5 #include "base/file_util.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <psapi.h> 8 #include <psapi.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #include <shlobj.h> 10 #include <shlobj.h>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 return FilePath(); 44 return FilePath();
45 return FilePath(file_path); 45 return FilePath(file_path);
46 } 46 }
47 47
48 bool DeleteFile(const FilePath& path, bool recursive) { 48 bool DeleteFile(const FilePath& path, bool recursive) {
49 ThreadRestrictions::AssertIOAllowed(); 49 ThreadRestrictions::AssertIOAllowed();
50 50
51 if (path.value().length() >= MAX_PATH) 51 if (path.value().length() >= MAX_PATH)
52 return false; 52 return false;
53 53
54 // On XP SHFileOperation will return ERROR_ACCESS_DENIED instead of
55 // ERROR_FILE_NOT_FOUND, so just shortcut this here.
56 if (path.empty())
57 return true;
58
54 if (!recursive) { 59 if (!recursive) {
55 // If not recursing, then first check to see if |path| is a directory. 60 // If not recursing, then first check to see if |path| is a directory.
56 // If it is, then remove it with RemoveDirectory. 61 // If it is, then remove it with RemoveDirectory.
57 File::Info file_info; 62 File::Info file_info;
58 if (GetFileInfo(path, &file_info) && file_info.is_directory) 63 if (GetFileInfo(path, &file_info) && file_info.is_directory)
59 return RemoveDirectory(path.value().c_str()) != 0; 64 return RemoveDirectory(path.value().c_str()) != 0;
60 65
61 // Otherwise, it's a file, wildcard or non-existant. Try DeleteFile first 66 // Otherwise, it's a file, wildcard or non-existant. Try DeleteFile first
62 // because it should be faster. If DeleteFile fails, then we fall through 67 // because it should be faster. If DeleteFile fails, then we fall through
63 // to SHFileOperation, which will do the right thing. 68 // to SHFileOperation, which will do the right thing.
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 // Like Move, this function is not transactional, so we just 785 // Like Move, this function is not transactional, so we just
781 // leave the copied bits behind if deleting from_path fails. 786 // leave the copied bits behind if deleting from_path fails.
782 // If to_path exists previously then we have already overwritten 787 // If to_path exists previously then we have already overwritten
783 // it by now, we don't get better off by deleting the new bits. 788 // it by now, we don't get better off by deleting the new bits.
784 } 789 }
785 return false; 790 return false;
786 } 791 }
787 792
788 } // namespace internal 793 } // namespace internal
789 } // namespace base 794 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698