| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 DWORD size_dword = base::checked_cast<DWORD>(size); | 73 DWORD size_dword = base::checked_cast<DWORD>(size); |
| 74 DWORD bytes_written; | 74 DWORD bytes_written; |
| 75 BOOL rv = ::WriteFile(file, buffer, size_dword, &bytes_written, nullptr); | 75 BOOL rv = ::WriteFile(file, buffer, size_dword, &bytes_written, nullptr); |
| 76 if (!rv) | 76 if (!rv) |
| 77 return -1; | 77 return -1; |
| 78 CHECK_EQ(bytes_written, size_dword); | 78 CHECK_EQ(bytes_written, size_dword); |
| 79 return bytes_written; | 79 return bytes_written; |
| 80 } | 80 } |
| 81 | 81 |
| 82 FileHandle LoggingOpenFileForRead(const base::FilePath& path) { | 82 FileHandle LoggingOpenFileForRead(const base::FilePath& path) { |
| 83 HANDLE file = CreateFile(path.value().c_str(), GENERIC_READ, FILE_SHARE_READ, | 83 HANDLE file = CreateFile(path.value().c_str(), |
| 84 nullptr, OPEN_EXISTING, 0, nullptr); | 84 GENERIC_READ, |
| 85 FILE_SHARE_READ | FILE_SHARE_WRITE, |
| 86 nullptr, |
| 87 OPEN_EXISTING, |
| 88 0, |
| 89 nullptr); |
| 85 PLOG_IF(ERROR, file == INVALID_HANDLE_VALUE) << "CreateFile " | 90 PLOG_IF(ERROR, file == INVALID_HANDLE_VALUE) << "CreateFile " |
| 86 << path.value().c_str(); | 91 << path.value().c_str(); |
| 87 return file; | 92 return file; |
| 88 } | 93 } |
| 89 | 94 |
| 90 FileHandle LoggingOpenFileForWrite(const base::FilePath& path, | 95 FileHandle LoggingOpenFileForWrite(const base::FilePath& path, |
| 91 FileWriteMode mode, | 96 FileWriteMode mode, |
| 92 FilePermissions permissions) { | 97 FilePermissions permissions) { |
| 93 DWORD disposition = 0; | 98 DWORD disposition = 0; |
| 94 switch (mode) { | 99 switch (mode) { |
| 95 case FileWriteMode::kReuseOrCreate: | 100 case FileWriteMode::kReuseOrCreate: |
| 96 disposition = OPEN_ALWAYS; | 101 disposition = OPEN_ALWAYS; |
| 97 break; | 102 break; |
| 98 case FileWriteMode::kTruncateOrCreate: | 103 case FileWriteMode::kTruncateOrCreate: |
| 99 disposition = CREATE_ALWAYS; | 104 disposition = CREATE_ALWAYS; |
| 100 break; | 105 break; |
| 101 case FileWriteMode::kCreateOrFail: | 106 case FileWriteMode::kCreateOrFail: |
| 102 disposition = CREATE_NEW; | 107 disposition = CREATE_NEW; |
| 103 break; | 108 break; |
| 104 } | 109 } |
| 105 HANDLE file = CreateFile(path.value().c_str(), GENERIC_WRITE, 0, nullptr, | 110 HANDLE file = CreateFile(path.value().c_str(), |
| 106 disposition, FILE_ATTRIBUTE_NORMAL, nullptr); | 111 GENERIC_WRITE, |
| 112 FILE_SHARE_READ | FILE_SHARE_WRITE, |
| 113 nullptr, |
| 114 disposition, |
| 115 FILE_ATTRIBUTE_NORMAL, |
| 116 nullptr); |
| 107 PLOG_IF(ERROR, file == INVALID_HANDLE_VALUE) << "CreateFile " | 117 PLOG_IF(ERROR, file == INVALID_HANDLE_VALUE) << "CreateFile " |
| 108 << path.value().c_str(); | 118 << path.value().c_str(); |
| 109 return file; | 119 return file; |
| 110 } | 120 } |
| 111 | 121 |
| 122 bool LoggingLockFile(FileHandle file, FileLocking locking) { |
| 123 DWORD flags = |
| 124 (locking == FileLocking::kExclusive) ? LOCKFILE_EXCLUSIVE_LOCK : 0; |
| 125 |
| 126 // Note that the `Offset` fields of overlapped indicate the start location for |
| 127 // locking (beginning of file in this case), and `hEvent` must be also be set |
| 128 // to 0. |
| 129 OVERLAPPED overlapped = {0}; |
| 130 if (!LockFileEx(file, flags, 0, MAXDWORD, MAXDWORD, &overlapped)) { |
| 131 PLOG(ERROR) << "LockFileEx"; |
| 132 return false; |
| 133 } |
| 134 return true; |
| 135 } |
| 136 |
| 137 bool LoggingUnlockFile(FileHandle file) { |
| 138 // Note that the `Offset` fields of overlapped indicate the start location for |
| 139 // locking (beginning of file in this case), and `hEvent` must be also be set |
| 140 // to 0. |
| 141 OVERLAPPED overlapped = {0}; |
| 142 if (!UnlockFileEx(file, 0, MAXDWORD, MAXDWORD, &overlapped)) { |
| 143 PLOG(ERROR) << "UnlockFileEx"; |
| 144 return false; |
| 145 } |
| 146 return true; |
| 147 } |
| 148 |
| 112 FileOffset LoggingSeekFile(FileHandle file, FileOffset offset, int whence) { | 149 FileOffset LoggingSeekFile(FileHandle file, FileOffset offset, int whence) { |
| 113 DWORD method = 0; | 150 DWORD method = 0; |
| 114 switch (whence) { | 151 switch (whence) { |
| 115 case SEEK_SET: | 152 case SEEK_SET: |
| 116 method = FILE_BEGIN; | 153 method = FILE_BEGIN; |
| 117 break; | 154 break; |
| 118 case SEEK_CUR: | 155 case SEEK_CUR: |
| 119 method = FILE_CURRENT; | 156 method = FILE_CURRENT; |
| 120 break; | 157 break; |
| 121 case SEEK_END: | 158 case SEEK_END: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 137 return new_offset.QuadPart; | 174 return new_offset.QuadPart; |
| 138 } | 175 } |
| 139 | 176 |
| 140 bool LoggingCloseFile(FileHandle file) { | 177 bool LoggingCloseFile(FileHandle file) { |
| 141 BOOL rv = CloseHandle(file); | 178 BOOL rv = CloseHandle(file); |
| 142 PLOG_IF(ERROR, !rv) << "CloseHandle"; | 179 PLOG_IF(ERROR, !rv) << "CloseHandle"; |
| 143 return rv; | 180 return rv; |
| 144 } | 181 } |
| 145 | 182 |
| 146 } // namespace crashpad | 183 } // namespace crashpad |
| OLD | NEW |