| 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 | 
|---|