| 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 "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/threading/thread_restrictions.h" | 9 #include "base/threading/thread_restrictions.h" |
| 10 | 10 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 } | 106 } |
| 107 | 107 |
| 108 return file; | 108 return file; |
| 109 } | 109 } |
| 110 | 110 |
| 111 bool ClosePlatformFile(PlatformFile file) { | 111 bool ClosePlatformFile(PlatformFile file) { |
| 112 base::ThreadRestrictions::AssertIOAllowed(); | 112 base::ThreadRestrictions::AssertIOAllowed(); |
| 113 return (CloseHandle(file) != 0); | 113 return (CloseHandle(file) != 0); |
| 114 } | 114 } |
| 115 | 115 |
| 116 int64 SeekPlatformFile(PlatformFile file, |
| 117 PlatformFileWhence whence, |
| 118 int64 offset) { |
| 119 base::ThreadRestrictions::AssertIOAllowed(); |
| 120 if (file < 0 || offset < 0) |
| 121 return -1; |
| 122 |
| 123 LARGE_INTEGER distance, res; |
| 124 distance.QuadPart = offset; |
| 125 DWORD move_method = static_cast<DWORD>(whence); |
| 126 if (!SetFilePointerEx(file_, distance, &res, move_method)) |
| 127 return -1; |
| 128 return res.QuadPart; |
| 129 } |
| 130 |
| 116 int ReadPlatformFile(PlatformFile file, int64 offset, char* data, int size) { | 131 int ReadPlatformFile(PlatformFile file, int64 offset, char* data, int size) { |
| 117 base::ThreadRestrictions::AssertIOAllowed(); | 132 base::ThreadRestrictions::AssertIOAllowed(); |
| 118 if (file == kInvalidPlatformFileValue) | 133 if (file == kInvalidPlatformFileValue) |
| 119 return -1; | 134 return -1; |
| 120 | 135 |
| 121 LARGE_INTEGER offset_li; | 136 LARGE_INTEGER offset_li; |
| 122 offset_li.QuadPart = offset; | 137 offset_li.QuadPart = offset; |
| 123 | 138 |
| 124 OVERLAPPED overlapped = {0}; | 139 OVERLAPPED overlapped = {0}; |
| 125 overlapped.Offset = offset_li.LowPart; | 140 overlapped.Offset = offset_li.LowPart; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 136 | 151 |
| 137 int ReadPlatformFileAtCurrentPos(PlatformFile file, char* data, int size) { | 152 int ReadPlatformFileAtCurrentPos(PlatformFile file, char* data, int size) { |
| 138 return ReadPlatformFile(file, 0, data, size); | 153 return ReadPlatformFile(file, 0, data, size); |
| 139 } | 154 } |
| 140 | 155 |
| 141 int ReadPlatformFileNoBestEffort(PlatformFile file, int64 offset, char* data, | 156 int ReadPlatformFileNoBestEffort(PlatformFile file, int64 offset, char* data, |
| 142 int size) { | 157 int size) { |
| 143 return ReadPlatformFile(file, offset, data, size); | 158 return ReadPlatformFile(file, offset, data, size); |
| 144 } | 159 } |
| 145 | 160 |
| 161 int ReadPlatformFileCurPosNoBestEffort(PlatformFile file, |
| 162 char* data, int size) { |
| 163 return ReadPlatformFile(file, 0, data, size); |
| 164 } |
| 165 |
| 146 int WritePlatformFile(PlatformFile file, int64 offset, | 166 int WritePlatformFile(PlatformFile file, int64 offset, |
| 147 const char* data, int size) { | 167 const char* data, int size) { |
| 148 base::ThreadRestrictions::AssertIOAllowed(); | 168 base::ThreadRestrictions::AssertIOAllowed(); |
| 149 if (file == kInvalidPlatformFileValue) | 169 if (file == kInvalidPlatformFileValue) |
| 150 return -1; | 170 return -1; |
| 151 | 171 |
| 152 LARGE_INTEGER offset_li; | 172 LARGE_INTEGER offset_li; |
| 153 offset_li.QuadPart = offset; | 173 offset_li.QuadPart = offset; |
| 154 | 174 |
| 155 OVERLAPPED overlapped = {0}; | 175 OVERLAPPED overlapped = {0}; |
| 156 overlapped.Offset = offset_li.LowPart; | 176 overlapped.Offset = offset_li.LowPart; |
| 157 overlapped.OffsetHigh = offset_li.HighPart; | 177 overlapped.OffsetHigh = offset_li.HighPart; |
| 158 | 178 |
| 159 DWORD bytes_written; | 179 DWORD bytes_written; |
| 160 if (::WriteFile(file, data, size, &bytes_written, &overlapped) != 0) | 180 if (::WriteFile(file, data, size, &bytes_written, &overlapped) != 0) |
| 161 return bytes_written; | 181 return bytes_written; |
| 162 | 182 |
| 163 return -1; | 183 return -1; |
| 164 } | 184 } |
| 165 | 185 |
| 166 int WritePlatformFileAtCurrentPos(PlatformFile file, const char* data, | 186 int WritePlatformFileAtCurrentPos(PlatformFile file, const char* data, |
| 167 int size) { | 187 int size) { |
| 168 return WritePlatformFile(file, 0, data, size); | 188 return WritePlatformFile(file, 0, data, size); |
| 169 } | 189 } |
| 170 | 190 |
| 191 int WritePlatformFileCurPosNoBestEffort(PlatformFile file, |
| 192 const char* data, int size) { |
| 193 return WritePlatformFile(file, 0, data, size); |
| 194 } |
| 195 |
| 171 bool TruncatePlatformFile(PlatformFile file, int64 length) { | 196 bool TruncatePlatformFile(PlatformFile file, int64 length) { |
| 172 base::ThreadRestrictions::AssertIOAllowed(); | 197 base::ThreadRestrictions::AssertIOAllowed(); |
| 173 if (file == kInvalidPlatformFileValue) | 198 if (file == kInvalidPlatformFileValue) |
| 174 return false; | 199 return false; |
| 175 | 200 |
| 176 // Get the current file pointer. | 201 // Get the current file pointer. |
| 177 LARGE_INTEGER file_pointer; | 202 LARGE_INTEGER file_pointer; |
| 178 LARGE_INTEGER zero; | 203 LARGE_INTEGER zero; |
| 179 zero.QuadPart = 0; | 204 zero.QuadPart = 0; |
| 180 if (::SetFilePointerEx(file, zero, &file_pointer, FILE_CURRENT) == 0) | 205 if (::SetFilePointerEx(file, zero, &file_pointer, FILE_CURRENT) == 0) |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 info->is_directory = | 252 info->is_directory = |
| 228 (file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; | 253 (file_info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; |
| 229 info->is_symbolic_link = false; // Windows doesn't have symbolic links. | 254 info->is_symbolic_link = false; // Windows doesn't have symbolic links. |
| 230 info->last_modified = base::Time::FromFileTime(file_info.ftLastWriteTime); | 255 info->last_modified = base::Time::FromFileTime(file_info.ftLastWriteTime); |
| 231 info->last_accessed = base::Time::FromFileTime(file_info.ftLastAccessTime); | 256 info->last_accessed = base::Time::FromFileTime(file_info.ftLastAccessTime); |
| 232 info->creation_time = base::Time::FromFileTime(file_info.ftCreationTime); | 257 info->creation_time = base::Time::FromFileTime(file_info.ftCreationTime); |
| 233 return true; | 258 return true; |
| 234 } | 259 } |
| 235 | 260 |
| 236 } // namespace base | 261 } // namespace base |
| OLD | NEW |