diff options
| author | 2015-11-05 00:12:57 +0000 | |
|---|---|---|
| committer | 2015-11-05 00:12:57 +0000 | |
| commit | fd6843236fe9094fc8868f1a58e6ba4364a485a7 (patch) | |
| tree | 758ac103000c7f15c1c5e457fca1f496de61b9a5 /libs/binder/Parcel.cpp | |
| parent | c84da67d723ce4bafc3622cd269207ea3995ff1c (diff) | |
| parent | eb8e15f9bb29f8794f8be819530631c358fd6a15 (diff) | |
Merge "Add support for reading/writing a vector of binders"
Diffstat (limited to 'libs/binder/Parcel.cpp')
| -rw-r--r-- | libs/binder/Parcel.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index 694916cf10..db1fc5c265 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -1045,6 +1045,56 @@ status_t Parcel::writeStrongBinder(const sp<IBinder>& val) return flatten_binder(ProcessState::self(), val, this); } +status_t Parcel::writeStrongBinderVector(const std::vector<sp<IBinder>>& val) +{ + if (val.size() > std::numeric_limits<int32_t>::max()) { + return BAD_VALUE; + } + + status_t status = writeInt32(val.size()); + + if (status != OK) { + return status; + } + + for (const auto& item : val) { + status = writeStrongBinder(item); + + if (status != OK) { + return status; + } + } + + return OK; +} + +status_t Parcel::readStrongBinderVector(std::vector<sp<IBinder>>* val) const { + val->clear(); + + int32_t size; + status_t status = readInt32(&size); + + if (status != OK) { + return status; + } + + if (size < 0) { + return BAD_VALUE; + } + + val->resize(size); + + for (auto& v : *val) { + status = readStrongBinder(&v); + + if (status != OK) { + return status; + } + } + + return OK; +} + status_t Parcel::writeWeakBinder(const wp<IBinder>& val) { return flatten_binder(ProcessState::self(), val, this); |