| 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/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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |