diff options
author | Jakub Pawlowski <jpawlowski@google.com> | 2017-04-05 09:22:29 -0700 |
---|---|---|
committer | Jakub Pawlowski <jpawlowski@google.com> | 2018-10-12 19:25:59 +0200 |
commit | e280f12834190c543be1ad4fddf6a642f65b998a (patch) | |
tree | a398a922d546c95123c3cc6e78091bef5378969b /ipc/ipc_message_protobuf_utils.h | |
parent | 23b27ba5c54bf6368980117d91bc51c4495e2c50 (diff) | |
download | libchrome-e280f12834190c543be1ad4fddf6a642f65b998a.tar.gz |
Uprev libchrome to r576279 (1/many)
This patch brings the latest and greatest features of libchrome to
android. It contains ~2600 patches.
Reason for uprev: libbluetooth want to use some of the most recent
features avaliable.
Test: libchrome_test
Change-Id: Iccdec267948daab29e6328694f4c7d2f71ea26ca
Merged-In: Iccdec267948daab29e6328694f4c7d2f71ea26ca
Diffstat (limited to 'ipc/ipc_message_protobuf_utils.h')
-rw-r--r-- | ipc/ipc_message_protobuf_utils.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ipc/ipc_message_protobuf_utils.h b/ipc/ipc_message_protobuf_utils.h new file mode 100644 index 0000000000..0168b150fc --- /dev/null +++ b/ipc/ipc_message_protobuf_utils.h @@ -0,0 +1,67 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IPC_IPC_MESSAGE_PROTOBUF_UTILS_H_ +#define IPC_IPC_MESSAGE_PROTOBUF_UTILS_H_ + +#include "build/build_config.h" + +#if defined(OS_NACL_NONSFI) +static_assert(false, + "ipc_message_protobuf_utils is not able to work with " + "nacl_nonsfi configuration."); +#endif + +#include "base/pickle.h" +#include "ipc/ipc_param_traits.h" +#include "ipc/ipc_message_utils.h" +#include "third_party/protobuf/src/google/protobuf/repeated_field.h" + +namespace IPC { + +template <class RepeatedFieldLike, class StorageType> +struct RepeatedFieldParamTraits { + typedef RepeatedFieldLike param_type; + static void Write(base::Pickle* m, const param_type& p) { + WriteParam(m, p.size()); + for (int i = 0; i < p.size(); i++) + WriteParam(m, p.Get(i)); + } + static bool Read(const base::Pickle* m, + base::PickleIterator* iter, + param_type* r) { + int size; + // ReadLength() checks for < 0 itself. + if (!iter->ReadLength(&size)) + return false; + // Avoid integer overflow / assertion failure in Reserve() function. + if (INT_MAX / sizeof(StorageType) <= static_cast<size_t>(size)) + return false; + r->Reserve(size); + for (int i = 0; i < size; i++) { + if (!ReadParam(m, iter, r->Add())) + return false; + } + return true; + } + static void Log(const param_type& p, std::string* l) { + for (int i = 0; i < p.size(); ++i) { + if (i != 0) + l->append(" "); + LogParam(p.Get(i), l); + } + } +}; + +template <class P> +struct ParamTraits<google::protobuf::RepeatedField<P>> : + RepeatedFieldParamTraits<google::protobuf::RepeatedField<P>, P> {}; + +template <class P> +struct ParamTraits<google::protobuf::RepeatedPtrField<P>> : + RepeatedFieldParamTraits<google::protobuf::RepeatedPtrField<P>, void*> {}; + +} // namespace IPC + +#endif // IPC_IPC_MESSAGE_PROTOBUF_UTILS_H_ |