Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe914cc8 authored by Casey Dahlin's avatar Casey Dahlin Committed by android-build-merger
Browse files

Merge "Add readStrongBinder that takes an interface" am: 71b70a24 am: 6319281c

am: 75c5de42

* commit '75c5de42':
  Add readStrongBinder that takes an interface
parents c704161b 75c5de42
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include <utils/Flattenable.h>
#include <linux/binder.h>

#include <binder/IInterface.h>

// ---------------------------------------------------------------------------
namespace android {

@@ -196,8 +198,12 @@ public:
    status_t            readString16(String16* pArg) const;
    const char16_t*     readString16Inplace(size_t* outLen) const;
    sp<IBinder>         readStrongBinder() const;
    status_t            readStrongBinder(sp<IBinder>* val) const;
    wp<IBinder>         readWeakBinder() const;

    template<typename T>
    status_t readStrongBinder(sp<T>* val) const;

    status_t            readByteVector(std::vector<int8_t>* val) const;
    status_t            readInt32Vector(std::vector<int32_t>* val) const;
    status_t            readInt64Vector(std::vector<int64_t>* val) const;
@@ -432,6 +438,22 @@ status_t Parcel::read(LightFlattenable<T>& val) const {
    return NO_ERROR;
}

template<typename T>
status_t Parcel::readStrongBinder(sp<T>* val) const {
    sp<IBinder> tmp;
    status_t ret = readStrongBinder(&tmp);

    if (ret == OK) {
        *val = interface_cast<T>(tmp);

        if (val->get() == nullptr) {
            return UNKNOWN_ERROR;
        }
    }

    return ret;
}

// ---------------------------------------------------------------------------

inline TextOutput& operator<<(TextOutput& to, const Parcel& parcel)
+6 −1
Original line number Diff line number Diff line
@@ -1805,10 +1805,15 @@ const char16_t* Parcel::readString16Inplace(size_t* outLen) const
    return NULL;
}

status_t Parcel::readStrongBinder(sp<IBinder>* val) const
{
    return unflatten_binder(ProcessState::self(), *this, val);
}

sp<IBinder> Parcel::readStrongBinder() const
{
    sp<IBinder> val;
    unflatten_binder(ProcessState::self(), *this, &val);
    readStrongBinder(&val);
    return val;
}