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

Side by Side Diff: base/platform_file_win.cc

Issue 14886003: Make base:ReplaceFile return an informative error. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ToT Created 7 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 | « base/platform_file_posix.cc ('k') | third_party/leveldatabase/env_chromium.cc » ('j') | 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/platform_file.h" 5 #include "base/platform_file.h"
6 6
7 #include <io.h> 7 #include <io.h>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 if (created && (INVALID_HANDLE_VALUE != file)) { 83 if (created && (INVALID_HANDLE_VALUE != file)) {
84 if (flags & (PLATFORM_FILE_OPEN_ALWAYS)) 84 if (flags & (PLATFORM_FILE_OPEN_ALWAYS))
85 *created = (ERROR_ALREADY_EXISTS != GetLastError()); 85 *created = (ERROR_ALREADY_EXISTS != GetLastError());
86 else if (flags & (PLATFORM_FILE_CREATE_ALWAYS | PLATFORM_FILE_CREATE)) 86 else if (flags & (PLATFORM_FILE_CREATE_ALWAYS | PLATFORM_FILE_CREATE))
87 *created = true; 87 *created = true;
88 } 88 }
89 89
90 if (error) { 90 if (error) {
91 if (file != kInvalidPlatformFileValue) 91 if (file != kInvalidPlatformFileValue)
92 *error = PLATFORM_FILE_OK; 92 *error = PLATFORM_FILE_OK;
93 else { 93 else
94 DWORD last_error = GetLastError(); 94 *error = LastErrorToPlatformFileError(GetLastError());
95 switch (last_error) {
96 case ERROR_SHARING_VIOLATION:
97 *error = PLATFORM_FILE_ERROR_IN_USE;
98 break;
99 case ERROR_FILE_EXISTS:
100 *error = PLATFORM_FILE_ERROR_EXISTS;
101 break;
102 case ERROR_FILE_NOT_FOUND:
103 case ERROR_PATH_NOT_FOUND:
104 *error = PLATFORM_FILE_ERROR_NOT_FOUND;
105 break;
106 case ERROR_ACCESS_DENIED:
107 *error = PLATFORM_FILE_ERROR_ACCESS_DENIED;
108 break;
109 case ERROR_TOO_MANY_OPEN_FILES:
110 *error = PLATFORM_FILE_ERROR_TOO_MANY_OPENED;
111 break;
112 case ERROR_OUTOFMEMORY:
113 case ERROR_NOT_ENOUGH_MEMORY:
114 *error = PLATFORM_FILE_ERROR_NO_MEMORY;
115 break;
116 case ERROR_HANDLE_DISK_FULL:
117 case ERROR_DISK_FULL:
118 case ERROR_DISK_RESOURCES_EXHAUSTED:
119 *error = PLATFORM_FILE_ERROR_NO_SPACE;
120 break;
121 case ERROR_USER_MAPPED_FILE:
122 *error = PLATFORM_FILE_ERROR_INVALID_OPERATION;
123 break;
124 case ERROR_NOT_READY:
125 case ERROR_SECTOR_NOT_FOUND:
126 case ERROR_DEV_NOT_EXIST:
127 case ERROR_IO_DEVICE:
128 case ERROR_FILE_CORRUPT:
129 case ERROR_DISK_CORRUPT:
130 *error = PLATFORM_FILE_ERROR_IO;
131 break;
132 default:
133 UMA_HISTOGRAM_SPARSE_SLOWLY("PlatformFile.UnknownCreateFileErrors",
134 last_error);
135 *error = PLATFORM_FILE_ERROR_FAILED;
136 }
137 }
138 } 95 }
139 96
140 return file; 97 return file;
141 } 98 }
142 99
143 FILE* FdopenPlatformFile(PlatformFile file, const char* mode) { 100 FILE* FdopenPlatformFile(PlatformFile file, const char* mode) {
144 if (file == kInvalidPlatformFileValue) 101 if (file == kInvalidPlatformFileValue)
145 return NULL; 102 return NULL;
146 int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0); 103 int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0);
147 if (fd < 0) 104 if (fd < 0)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 info->size = size.QuadPart; 249 info->size = size.QuadPart;
293 info->is_directory = 250 info->is_directory =
294 (file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; 251 (file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
295 info->is_symbolic_link = false; // Windows doesn't have symbolic links. 252 info->is_symbolic_link = false; // Windows doesn't have symbolic links.
296 info->last_modified = base::Time::FromFileTime(file_info.ftLastWriteTime); 253 info->last_modified = base::Time::FromFileTime(file_info.ftLastWriteTime);
297 info->last_accessed = base::Time::FromFileTime(file_info.ftLastAccessTime); 254 info->last_accessed = base::Time::FromFileTime(file_info.ftLastAccessTime);
298 info->creation_time = base::Time::FromFileTime(file_info.ftCreationTime); 255 info->creation_time = base::Time::FromFileTime(file_info.ftCreationTime);
299 return true; 256 return true;
300 } 257 }
301 258
259 PlatformFileError LastErrorToPlatformFileError(DWORD last_error) {
260 switch (last_error) {
261 case ERROR_SHARING_VIOLATION:
262 return PLATFORM_FILE_ERROR_IN_USE;
263 case ERROR_FILE_EXISTS:
264 return PLATFORM_FILE_ERROR_EXISTS;
265 case ERROR_FILE_NOT_FOUND:
266 case ERROR_PATH_NOT_FOUND:
267 return PLATFORM_FILE_ERROR_NOT_FOUND;
268 case ERROR_ACCESS_DENIED:
269 return PLATFORM_FILE_ERROR_ACCESS_DENIED;
270 case ERROR_TOO_MANY_OPEN_FILES:
271 return PLATFORM_FILE_ERROR_TOO_MANY_OPENED;
272 case ERROR_OUTOFMEMORY:
273 case ERROR_NOT_ENOUGH_MEMORY:
274 return PLATFORM_FILE_ERROR_NO_MEMORY;
275 case ERROR_HANDLE_DISK_FULL:
276 case ERROR_DISK_FULL:
277 case ERROR_DISK_RESOURCES_EXHAUSTED:
278 return PLATFORM_FILE_ERROR_NO_SPACE;
279 case ERROR_USER_MAPPED_FILE:
280 return PLATFORM_FILE_ERROR_INVALID_OPERATION;
281 case ERROR_NOT_READY:
282 case ERROR_SECTOR_NOT_FOUND:
283 case ERROR_DEV_NOT_EXIST:
284 case ERROR_IO_DEVICE:
285 case ERROR_FILE_CORRUPT:
286 case ERROR_DISK_CORRUPT:
287 return PLATFORM_FILE_ERROR_IO;
288 default:
289 UMA_HISTOGRAM_SPARSE_SLOWLY("PlatformFile.UnknownCreateFileErrors",
290 last_error);
291 return PLATFORM_FILE_ERROR_FAILED;
292 }
293 }
294
302 } // namespace base 295 } // namespace base
OLDNEW
« no previous file with comments | « base/platform_file_posix.cc ('k') | third_party/leveldatabase/env_chromium.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698