| 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/files/file.h" | 5 #include "base/files/file.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
| 10 #include <unistd.h> | 10 #include <unistd.h> |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 #endif // defined(OS_NACL) | 118 #endif // defined(OS_NACL) |
| 119 | 119 |
| 120 } // namespace | 120 } // namespace |
| 121 | 121 |
| 122 // NaCl doesn't implement system calls to open files directly. | 122 // NaCl doesn't implement system calls to open files directly. |
| 123 #if !defined(OS_NACL) | 123 #if !defined(OS_NACL) |
| 124 // TODO(erikkay): does it make sense to support FLAG_EXCLUSIVE_* here? | 124 // TODO(erikkay): does it make sense to support FLAG_EXCLUSIVE_* here? |
| 125 void File::InitializeUnsafe(const FilePath& name, uint32 flags) { | 125 void File::InitializeUnsafe(const FilePath& name, uint32 flags) { |
| 126 base::ThreadRestrictions::AssertIOAllowed(); | 126 base::ThreadRestrictions::AssertIOAllowed(); |
| 127 DCHECK(!IsValid()); | 127 DCHECK(!IsValid()); |
| 128 DCHECK(!(flags & FLAG_ASYNC)); | |
| 129 | 128 |
| 130 int open_flags = 0; | 129 int open_flags = 0; |
| 131 if (flags & FLAG_CREATE) | 130 if (flags & FLAG_CREATE) |
| 132 open_flags = O_CREAT | O_EXCL; | 131 open_flags = O_CREAT | O_EXCL; |
| 133 | 132 |
| 134 created_ = false; | 133 created_ = false; |
| 135 | 134 |
| 136 if (flags & FLAG_CREATE_ALWAYS) { | 135 if (flags & FLAG_CREATE_ALWAYS) { |
| 137 DCHECK(!open_flags); | 136 DCHECK(!open_flags); |
| 138 open_flags = O_CREAT | O_TRUNC; | 137 open_flags = O_CREAT | O_TRUNC; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 open_flags |= O_CREAT; | 183 open_flags |= O_CREAT; |
| 185 if (flags & FLAG_EXCLUSIVE_READ || flags & FLAG_EXCLUSIVE_WRITE) | 184 if (flags & FLAG_EXCLUSIVE_READ || flags & FLAG_EXCLUSIVE_WRITE) |
| 186 open_flags |= O_EXCL; // together with O_CREAT implies O_NOFOLLOW | 185 open_flags |= O_EXCL; // together with O_CREAT implies O_NOFOLLOW |
| 187 | 186 |
| 188 descriptor = HANDLE_EINTR(open(name.value().c_str(), open_flags, mode)); | 187 descriptor = HANDLE_EINTR(open(name.value().c_str(), open_flags, mode)); |
| 189 if (descriptor >= 0) | 188 if (descriptor >= 0) |
| 190 created_ = true; | 189 created_ = true; |
| 191 } | 190 } |
| 192 } | 191 } |
| 193 | 192 |
| 194 if (descriptor >= 0 && (flags & (FLAG_CREATE_ALWAYS | FLAG_CREATE))) | 193 if (descriptor < 0) { |
| 194 error_details_ = File::OSErrorToFileError(errno); |
| 195 return; |
| 196 } |
| 197 |
| 198 if (flags & (FLAG_CREATE_ALWAYS | FLAG_CREATE)) |
| 195 created_ = true; | 199 created_ = true; |
| 196 | 200 |
| 197 if ((descriptor >= 0) && (flags & FLAG_DELETE_ON_CLOSE)) | 201 if (flags & FLAG_DELETE_ON_CLOSE) |
| 198 unlink(name.value().c_str()); | 202 unlink(name.value().c_str()); |
| 199 | 203 |
| 200 if (descriptor >= 0) | 204 async_ = ((flags & FLAG_ASYNC) == FLAG_ASYNC); |
| 201 error_details_ = FILE_OK; | 205 error_details_ = FILE_OK; |
| 202 else | |
| 203 error_details_ = File::OSErrorToFileError(errno); | |
| 204 | |
| 205 file_ = descriptor; | 206 file_ = descriptor; |
| 206 } | 207 } |
| 207 #endif // !defined(OS_NACL) | 208 #endif // !defined(OS_NACL) |
| 208 | 209 |
| 209 bool File::IsValid() const { | 210 bool File::IsValid() const { |
| 210 return file_ >= 0; | 211 return file_ >= 0; |
| 211 } | 212 } |
| 212 | 213 |
| 213 PlatformFile File::TakePlatformFile() { | 214 PlatformFile File::TakePlatformFile() { |
| 214 PlatformFile file = file_; | 215 PlatformFile file = file_; |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 return FILE_ERROR_FAILED; | 472 return FILE_ERROR_FAILED; |
| 472 } | 473 } |
| 473 } | 474 } |
| 474 | 475 |
| 475 void File::SetPlatformFile(PlatformFile file) { | 476 void File::SetPlatformFile(PlatformFile file) { |
| 476 DCHECK_EQ(file_, kInvalidPlatformFileValue); | 477 DCHECK_EQ(file_, kInvalidPlatformFileValue); |
| 477 file_ = file; | 478 file_ = file; |
| 478 } | 479 } |
| 479 | 480 |
| 480 } // namespace base | 481 } // namespace base |
| OLD | NEW |