Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(351)

Side by Side Diff: webrtc/base/file_posix.cc

Issue 2306553002: Reland of Initial version of file wrapper (Closed)
Patch Set: Nit Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/base/file.cc ('k') | webrtc/base/file_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/base/file.h"
12
13 #include <errno.h>
14 #include <fcntl.h>
15 #include <sys/stat.h>
16 #include <sys/types.h>
17 #include <unistd.h>
18
19 #include <limits>
20
21 #include "webrtc/base/checks.h"
22
23 namespace rtc {
24
25 File File::Open(const std::string& path) {
26 return File(::open(path.c_str(), O_RDWR));
27 }
28
29 size_t File::Write(const uint8_t* data, size_t length) {
30 size_t total_written = 0;
31 do {
32 ssize_t written;
33 do {
34 written = ::write(file_, data + total_written, length - total_written);
35 } while (written == -1 && errno == EINTR);
36 if (written == -1)
37 break;
38 total_written += written;
39 } while (total_written < length);
40 return total_written;
41 }
42
43 size_t File::Read(uint8_t* buffer, size_t length) {
44 size_t total_read = 0;
45 do {
46 ssize_t read;
47 do {
48 read = ::read(file_, buffer + total_read, length - total_read);
49 } while (read == -1 && errno == EINTR);
50 if (read == -1)
51 break;
52 total_read += read;
53 } while (total_read < length);
54 return total_read;
55 }
56
57 size_t File::WriteAt(const uint8_t* data, size_t length, size_t offset) {
58 size_t total_written = 0;
59 do {
60 ssize_t written;
61 do {
62 written = ::pwrite(file_, data + total_written, length - total_written,
63 offset + total_written);
64 } while (written == -1 && errno == EINTR);
65 if (written == -1)
66 break;
67 total_written += written;
68 } while (total_written < length);
69 return total_written;
70 }
71
72 size_t File::ReadAt(uint8_t* buffer, size_t length, size_t offset) {
73 size_t total_read = 0;
74 do {
75 ssize_t read;
76 do {
77 read = ::pread(file_, buffer + total_read, length - total_read,
78 offset + total_read);
79 } while (read == -1 && errno == EINTR);
80 if (read == -1)
81 break;
82 total_read += read;
83 } while (total_read < length);
84 return total_read;
85 }
86
87 bool File::Seek(size_t offset) {
88 RTC_DCHECK_LE(offset, static_cast<size_t>(std::numeric_limits<off_t>::max()));
89 return lseek(file_, static_cast<off_t>(offset), SEEK_SET) != -1;
90 }
91
92 bool File::Close() {
93 if (file_ == rtc::kInvalidPlatformFileValue)
94 return false;
95 bool ret = close(file_) == 0;
96 file_ = rtc::kInvalidPlatformFileValue;
97 return ret;
98 }
99
100 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/file.cc ('k') | webrtc/base/file_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698