diff options
| author | 2019-11-19 15:12:30 -0800 | |
|---|---|---|
| committer | 2019-11-19 15:12:30 -0800 | |
| commit | 25843313c8ad16f98df60ac839ad3055044e6c87 (patch) | |
| tree | d037540a1e54b2507c726ce6c747a7346704070a | |
| parent | d965b134f17d9cf4bcd64c09cb1d5b920eb21820 (diff) | |
| parent | 9792ad05738c651ec0c9b978d59b50a698041fcd (diff) | |
Merge "Support ParcelFileDescriptor[] in libbinder_ndk"
am: 9792ad0573
Change-Id: I8fccf185d9b6392fbebb00b7fa2ca70b922ee233
| -rw-r--r-- | libs/binder/ndk/include_ndk/android/binder_parcel_utils.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h b/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h index f3bc31b0bb..787166762b 100644 --- a/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h +++ b/libs/binder/ndk/include_ndk/android/binder_parcel_utils.h @@ -441,6 +441,42 @@ binder_status_t AParcel_readStdVectorParcelableElement(const AParcel* parcel, vo } /** + * Writes a ScopedFileDescriptor object inside a std::vector<ScopedFileDescriptor> at index 'index' + * to 'parcel'. + */ +template <> +inline binder_status_t AParcel_writeStdVectorParcelableElement<ScopedFileDescriptor>( + AParcel* parcel, const void* vectorData, size_t index) { + const std::vector<ScopedFileDescriptor>* vector = + static_cast<const std::vector<ScopedFileDescriptor>*>(vectorData); + int writeFd = vector->at(index).get(); + if (writeFd < 0) { + return STATUS_UNEXPECTED_NULL; + } + return AParcel_writeParcelFileDescriptor(parcel, writeFd); +} + +/** + * Reads a ScopedFileDescriptor object inside a std::vector<ScopedFileDescriptor> at index 'index' + * from 'parcel'. + */ +template <> +inline binder_status_t AParcel_readStdVectorParcelableElement<ScopedFileDescriptor>( + const AParcel* parcel, void* vectorData, size_t index) { + std::vector<ScopedFileDescriptor>* vector = + static_cast<std::vector<ScopedFileDescriptor>*>(vectorData); + int readFd; + binder_status_t status = AParcel_readParcelFileDescriptor(parcel, &readFd); + if (status == STATUS_OK) { + if (readFd < 0) { + return STATUS_UNEXPECTED_NULL; + } + vector->at(index).set(readFd); + } + return status; +} + +/** * Convenience API for writing a std::vector<P> */ template <typename P> |