diff options
| author | 2022-08-09 19:13:00 +0000 | |
|---|---|---|
| committer | 2022-08-18 04:01:03 +0000 | |
| commit | 5a5edf1c82d0608ba9c7c45ebffcbf5fe4adb1e7 (patch) | |
| tree | 164559f0915281cd0737c3dacbfb7099102b1f9e | |
| parent | a417e3131cdf387838128b55b2b8cf5bc8d47027 (diff) | |
Add copy assignment operator for ParcelableHolder
Bug: b/241907959
Test: atest CtsNdkBinderTestCases
Change-Id: I593f6fe5c50f2a2cc71651fb87766568dffcfc6d
| -rw-r--r-- | libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h index f45aa7631b..c1f2620770 100644 --- a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h +++ b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h @@ -58,6 +58,9 @@ class AParcelableHolder { #endif AParcel_appendFrom(other.mParcel.get(), this->mParcel.get(), 0, AParcel_getDataSize(other.mParcel.get())); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); } } #endif @@ -192,6 +195,9 @@ class AParcelableHolder { if (__ANDROID_API__ >= 31) { #endif AParcel_reset(mParcel.get()); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); } } @@ -201,6 +207,29 @@ class AParcelableHolder { inline bool operator==(const AParcelableHolder& rhs) const { return this == &rhs; } inline bool operator>(const AParcelableHolder& rhs) const { return this > &rhs; } inline bool operator>=(const AParcelableHolder& rhs) const { return this >= &rhs; } +#if __ANDROID_API__ >= 31 + inline AParcelableHolder& operator=(const AParcelableHolder& rhs) { + // AParcelableHolder has been introduced in 31. +#ifdef __ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__ + if (__builtin_available(android 31, *)) { +#else + if (__ANDROID_API__ >= 31) { +#endif + this->reset(); + if (this->mStability != rhs.mStability) { + syslog(LOG_ERR, "AParcelableHolder stability mismatch: this %d rhs %d!", + this->mStability, rhs.mStability); + abort(); + } + AParcel_appendFrom(rhs.mParcel.get(), this->mParcel.get(), 0, + AParcel_getDataSize(rhs.mParcel.get())); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); + } + return *this; + } +#endif private: mutable ndk::ScopedAParcel mParcel; |