summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2020-02-14 17:45:13 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2020-02-14 17:45:13 +0000
commit51c6a7c8a423ca48d4287c715cd2beffa1c061ad (patch)
tree255ff2eb6ee45963ebfb450ab12c1e9bdb4dcbc8 /libs
parent27b827f6e3cd933e99c535d2d5803a72140b473e (diff)
parent95b71de24dd3862b5a66b5b40f2ecd59f82b92e0 (diff)
Merge "libbinder_ndk: no heap alloc when writing fd"
Diffstat (limited to 'libs')
-rw-r--r--libs/binder/ndk/parcel.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/libs/binder/ndk/parcel.cpp b/libs/binder/ndk/parcel.cpp
index f18e118bc9..f0ea237ee8 100644
--- a/libs/binder/ndk/parcel.cpp
+++ b/libs/binder/ndk/parcel.cpp
@@ -242,23 +242,18 @@ binder_status_t AParcel_readStrongBinder(const AParcel* parcel, AIBinder** binde
}
binder_status_t AParcel_writeParcelFileDescriptor(AParcel* parcel, int fd) {
- std::unique_ptr<ParcelFileDescriptor> parcelFd;
-
if (fd < 0) {
if (fd != -1) {
return STATUS_UNKNOWN_ERROR;
}
- // parcelFd = nullptr
- } else { // fd >= 0
- parcelFd = std::make_unique<ParcelFileDescriptor>(unique_fd(fd));
+ return parcel->get()->writeInt32(0); // null
}
- status_t status = parcel->get()->writeNullableParcelable(parcelFd);
+ ParcelFileDescriptor parcelFd = ParcelFileDescriptor(unique_fd(fd));
+ status_t status = parcel->get()->writeParcelable(parcelFd);
// ownership is retained by caller
- if (parcelFd != nullptr) {
- (void)parcelFd->release().release();
- }
+ (void)parcelFd.release().release();
return PruneStatusT(status);
}