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

Side by Side Diff: mojo/edk/test/test_utils_posix.cc

Issue 1350023003: Add a Mojo EDK for Chrome that uses one OS pipe per message pipe. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more cleanup Created 5 years, 2 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "third_party/mojo/src/mojo/edk/test/test_utils.h" 5 #include "mojo/edk/test/test_utils.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <unistd.h> 8 #include <unistd.h>
9 9
10 #include "base/posix/eintr_wrapper.h" 10 #include "base/posix/eintr_wrapper.h"
11 11
12 namespace mojo { 12 namespace mojo {
13 namespace edk {
13 namespace test { 14 namespace test {
14 15
15 bool BlockingWrite(const embedder::PlatformHandle& handle, 16 bool BlockingWrite(const PlatformHandle& handle,
16 const void* buffer, 17 const void* buffer,
17 size_t bytes_to_write, 18 size_t bytes_to_write,
18 size_t* bytes_written) { 19 size_t* bytes_written) {
19 int original_flags = fcntl(handle.fd, F_GETFL); 20 int original_flags = fcntl(handle.fd, F_GETFL);
20 if (original_flags == -1 || 21 if (original_flags == -1 ||
21 fcntl(handle.fd, F_SETFL, original_flags & (~O_NONBLOCK)) != 0) { 22 fcntl(handle.fd, F_SETFL, original_flags & (~O_NONBLOCK)) != 0) {
22 return false; 23 return false;
23 } 24 }
24 25
25 ssize_t result = HANDLE_EINTR(write(handle.fd, buffer, bytes_to_write)); 26 ssize_t result = HANDLE_EINTR(write(handle.fd, buffer, bytes_to_write));
26 27
27 fcntl(handle.fd, F_SETFL, original_flags); 28 fcntl(handle.fd, F_SETFL, original_flags);
28 29
29 if (result < 0) 30 if (result < 0)
30 return false; 31 return false;
31 32
32 *bytes_written = result; 33 *bytes_written = result;
33 return true; 34 return true;
34 } 35 }
35 36
36 bool BlockingRead(const embedder::PlatformHandle& handle, 37 bool BlockingRead(const PlatformHandle& handle,
37 void* buffer, 38 void* buffer,
38 size_t buffer_size, 39 size_t buffer_size,
39 size_t* bytes_read) { 40 size_t* bytes_read) {
40 int original_flags = fcntl(handle.fd, F_GETFL); 41 int original_flags = fcntl(handle.fd, F_GETFL);
41 if (original_flags == -1 || 42 if (original_flags == -1 ||
42 fcntl(handle.fd, F_SETFL, original_flags & (~O_NONBLOCK)) != 0) { 43 fcntl(handle.fd, F_SETFL, original_flags & (~O_NONBLOCK)) != 0) {
43 return false; 44 return false;
44 } 45 }
45 46
46 ssize_t result = HANDLE_EINTR(read(handle.fd, buffer, buffer_size)); 47 ssize_t result = HANDLE_EINTR(read(handle.fd, buffer, buffer_size));
47 48
48 fcntl(handle.fd, F_SETFL, original_flags); 49 fcntl(handle.fd, F_SETFL, original_flags);
49 50
50 if (result < 0) 51 if (result < 0)
51 return false; 52 return false;
52 53
53 *bytes_read = result; 54 *bytes_read = result;
54 return true; 55 return true;
55 } 56 }
56 57
57 bool NonBlockingRead(const embedder::PlatformHandle& handle, 58 bool NonBlockingRead(const PlatformHandle& handle,
58 void* buffer, 59 void* buffer,
59 size_t buffer_size, 60 size_t buffer_size,
60 size_t* bytes_read) { 61 size_t* bytes_read) {
61 ssize_t result = HANDLE_EINTR(read(handle.fd, buffer, buffer_size)); 62 ssize_t result = HANDLE_EINTR(read(handle.fd, buffer, buffer_size));
62 63
63 if (result < 0) { 64 if (result < 0) {
64 if (errno != EAGAIN && errno != EWOULDBLOCK) 65 if (errno != EAGAIN && errno != EWOULDBLOCK)
65 return false; 66 return false;
66 67
67 *bytes_read = 0; 68 *bytes_read = 0;
68 } else { 69 } else {
69 *bytes_read = result; 70 *bytes_read = result;
70 } 71 }
71 72
72 return true; 73 return true;
73 } 74 }
74 75
75 embedder::ScopedPlatformHandle PlatformHandleFromFILE(base::ScopedFILE fp) { 76 ScopedPlatformHandle PlatformHandleFromFILE(base::ScopedFILE fp) {
76 CHECK(fp); 77 CHECK(fp);
77 int rv = dup(fileno(fp.get())); 78 int rv = dup(fileno(fp.get()));
78 PCHECK(rv != -1) << "dup"; 79 PCHECK(rv != -1) << "dup";
79 return embedder::ScopedPlatformHandle(embedder::PlatformHandle(rv)); 80 return ScopedPlatformHandle(PlatformHandle(rv));
80 } 81 }
81 82
82 base::ScopedFILE FILEFromPlatformHandle(embedder::ScopedPlatformHandle h, 83 base::ScopedFILE FILEFromPlatformHandle(ScopedPlatformHandle h,
83 const char* mode) { 84 const char* mode) {
84 CHECK(h.is_valid()); 85 CHECK(h.is_valid());
85 base::ScopedFILE rv(fdopen(h.release().fd, mode)); 86 base::ScopedFILE rv(fdopen(h.release().fd, mode));
86 PCHECK(rv) << "fdopen"; 87 PCHECK(rv) << "fdopen";
87 return rv.Pass(); 88 return rv.Pass();
88 } 89 }
89 90
90 } // namespace test 91 } // namespace test
92 } // namespace edk
91 } // namespace mojo 93 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698