diff options
author | morrita <morrita@chromium.org> | 2014-09-24 13:11:45 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-24 20:11:59 +0000 |
commit | 96693856edc35a538f6ea8f0bd6ab55c75e3e823 (patch) | |
tree | 33bf28816211d8c3a5039db1d2f3a1ac74adf59e /ipc/ipc_message_utils.cc | |
parent | 33169d9f2497a79fdde3ae51c5aa7266032526c7 (diff) | |
download | chromium_src-96693856edc35a538f6ea8f0bd6ab55c75e3e823.zip chromium_src-96693856edc35a538f6ea8f0bd6ab55c75e3e823.tar.gz chromium_src-96693856edc35a538f6ea8f0bd6ab55c75e3e823.tar.bz2 |
IPC: Get rid of FileDescriptor usage from FileDescriptorSet and Message
This is a step toward to killing FileDescriptor.
This change lets FiileDescriptorSet have both Files (for owning fds)
and PlatformFiles (for non-owning fds). Doing this, we no longer
need FileDescriptor which provides |auto_close| flag.
BUG=415294
TEST=ipc_tests, ipc_mojo_unittests
R=agl@chromium.org, jam@hcromium.org, viettrungluu@chromium.org
Review URL: https://codereview.chromium.org/583473002
Cr-Commit-Position: refs/heads/master@{#296498}
Diffstat (limited to 'ipc/ipc_message_utils.cc')
-rw-r--r-- | ipc/ipc_message_utils.cc | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc index f5543ff..be8795b 100644 --- a/ipc/ipc_message_utils.cc +++ b/ipc/ipc_message_utils.cc @@ -462,8 +462,14 @@ void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) { const bool valid = p.fd >= 0; WriteParam(m, valid); - if (valid) { - if (!m->WriteFileDescriptor(p)) + if (!valid) + return; + + if (p.auto_close) { + if (!m->WriteFile(base::ScopedFD(p.fd))) + NOTREACHED(); + } else { + if (!m->WriteBorrowingFile(p.fd)) NOTREACHED(); } } @@ -471,17 +477,22 @@ void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) { bool ParamTraits<base::FileDescriptor>::Read(const Message* m, PickleIterator* iter, param_type* r) { + *r = base::FileDescriptor(); + bool valid; if (!ReadParam(m, iter, &valid)) return false; - if (!valid) { - r->fd = -1; - r->auto_close = false; + // TODO(morrita): Seems like this should return false. + if (!valid) return true; - } - return m->ReadFileDescriptor(iter, r); + base::ScopedFD fd; + if (!m->ReadFile(iter, &fd)) + return false; + + *r = base::FileDescriptor(fd.release(), true); + return true; } void ParamTraits<base::FileDescriptor>::Log(const param_type& p, |