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

Commit dda39f2a authored by Casey Dahlin's avatar Casey Dahlin Committed by Gerrit Code Review
Browse files

Merge "libbinder: Allow readByteVector to take uint8_t"

parents 16072e7e 185d3447
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -126,6 +126,8 @@ public:


    status_t            writeByteVector(const std::unique_ptr<std::vector<int8_t>>& val);
    status_t            writeByteVector(const std::unique_ptr<std::vector<int8_t>>& val);
    status_t            writeByteVector(const std::vector<int8_t>& val);
    status_t            writeByteVector(const std::vector<int8_t>& val);
    status_t            writeByteVector(const std::unique_ptr<std::vector<uint8_t>>& val);
    status_t            writeByteVector(const std::vector<uint8_t>& val);
    status_t            writeInt32Vector(const std::unique_ptr<std::vector<int32_t>>& val);
    status_t            writeInt32Vector(const std::unique_ptr<std::vector<int32_t>>& val);
    status_t            writeInt32Vector(const std::vector<int32_t>& val);
    status_t            writeInt32Vector(const std::vector<int32_t>& val);
    status_t            writeInt64Vector(const std::unique_ptr<std::vector<int64_t>>& val);
    status_t            writeInt64Vector(const std::unique_ptr<std::vector<int64_t>>& val);
@@ -271,6 +273,8 @@ public:


    status_t            readByteVector(std::unique_ptr<std::vector<int8_t>>* val) const;
    status_t            readByteVector(std::unique_ptr<std::vector<int8_t>>* val) const;
    status_t            readByteVector(std::vector<int8_t>* val) const;
    status_t            readByteVector(std::vector<int8_t>* val) const;
    status_t            readByteVector(std::unique_ptr<std::vector<uint8_t>>* val) const;
    status_t            readByteVector(std::vector<uint8_t>* val) const;
    status_t            readInt32Vector(std::unique_ptr<std::vector<int32_t>>* val) const;
    status_t            readInt32Vector(std::unique_ptr<std::vector<int32_t>>* val) const;
    status_t            readInt32Vector(std::vector<int32_t>* val) const;
    status_t            readInt32Vector(std::vector<int32_t>* val) const;
    status_t            readInt64Vector(std::unique_ptr<std::vector<int64_t>>* val) const;
    status_t            readInt64Vector(std::unique_ptr<std::vector<int64_t>>* val) const;
+71 −21
Original line number Original line Diff line number Diff line
@@ -810,16 +810,10 @@ status_t Parcel::writeUtf8AsUtf16(const std::unique_ptr<std::string>& str) {
  return writeUtf8AsUtf16(*str);
  return writeUtf8AsUtf16(*str);
}
}


status_t Parcel::writeByteVector(const std::unique_ptr<std::vector<int8_t>>& val)
namespace {
{
    if (!val) {
        return writeInt32(-1);
    }


    return writeByteVector(*val);
template<typename T>
}
status_t writeByteVectorInternal(Parcel* parcel, const std::vector<T>& val)

status_t Parcel::writeByteVector(const std::vector<int8_t>& val)
{
{
    status_t status;
    status_t status;
    if (val.size() > std::numeric_limits<int32_t>::max()) {
    if (val.size() > std::numeric_limits<int32_t>::max()) {
@@ -827,12 +821,12 @@ status_t Parcel::writeByteVector(const std::vector<int8_t>& val)
        return status;
        return status;
    }
    }


    status = writeInt32(val.size());
    status = parcel->writeInt32(val.size());
    if (status != OK) {
    if (status != OK) {
        return status;
        return status;
    }
    }


    void* data = writeInplace(val.size());
    void* data = parcel->writeInplace(val.size());
    if (!data) {
    if (!data) {
        status = BAD_VALUE;
        status = BAD_VALUE;
        return status;
        return status;
@@ -842,6 +836,37 @@ status_t Parcel::writeByteVector(const std::vector<int8_t>& val)
    return status;
    return status;
}
}


template<typename T>
status_t writeByteVectorInternalPtr(Parcel* parcel,
                                    const std::unique_ptr<std::vector<T>>& val)
{
    if (!val) {
        return parcel->writeInt32(-1);
    }

    return writeByteVectorInternal(parcel, *val);
}

}  // namespace

status_t Parcel::writeByteVector(const std::vector<int8_t>& val) {
    return writeByteVectorInternal(this, val);
}

status_t Parcel::writeByteVector(const std::unique_ptr<std::vector<int8_t>>& val)
{
    return writeByteVectorInternalPtr(this, val);
}

status_t Parcel::writeByteVector(const std::vector<uint8_t>& val) {
    return writeByteVectorInternal(this, val);
}

status_t Parcel::writeByteVector(const std::unique_ptr<std::vector<uint8_t>>& val)
{
    return writeByteVectorInternalPtr(this, val);
}

status_t Parcel::writeInt32Vector(const std::vector<int32_t>& val)
status_t Parcel::writeInt32Vector(const std::vector<int32_t>& val)
{
{
    return writeTypedVector(val, &Parcel::writeInt32);
    return writeTypedVector(val, &Parcel::writeInt32);
@@ -1408,11 +1433,15 @@ restart_write:
    return err;
    return err;
}
}


status_t Parcel::readByteVector(std::vector<int8_t>* val) const {
namespace {

template<typename T>
status_t readByteVectorInternal(const Parcel* parcel,
                                std::vector<T>* val) {
    val->clear();
    val->clear();


    int32_t size;
    int32_t size;
    status_t status = readInt32(&size);
    status_t status = parcel->readInt32(&size);


    if (status != OK) {
    if (status != OK) {
        return status;
        return status;
@@ -1422,12 +1451,12 @@ status_t Parcel::readByteVector(std::vector<int8_t>* val) const {
        status = UNEXPECTED_NULL;
        status = UNEXPECTED_NULL;
        return status;
        return status;
    }
    }
    if (size_t(size) > dataAvail()) {
    if (size_t(size) > parcel->dataAvail()) {
        status = BAD_VALUE;
        status = BAD_VALUE;
        return status;
        return status;
    }
    }


    const void* data = readInplace(size);
    const void* data = parcel->readInplace(size);
    if (!data) {
    if (!data) {
        status = BAD_VALUE;
        status = BAD_VALUE;
        return status;
        return status;
@@ -1438,20 +1467,23 @@ status_t Parcel::readByteVector(std::vector<int8_t>* val) const {
    return status;
    return status;
}
}


status_t Parcel::readByteVector(std::unique_ptr<std::vector<int8_t>>* val) const {
template<typename T>
    const int32_t start = dataPosition();
status_t readByteVectorInternalPtr(
        const Parcel* parcel,
        std::unique_ptr<std::vector<T>>* val) {
    const int32_t start = parcel->dataPosition();
    int32_t size;
    int32_t size;
    status_t status = readInt32(&size);
    status_t status = parcel->readInt32(&size);
    val->reset();
    val->reset();


    if (status != OK || size < 0) {
    if (status != OK || size < 0) {
        return status;
        return status;
    }
    }


    setDataPosition(start);
    parcel->setDataPosition(start);
    val->reset(new std::vector<int8_t>());
    val->reset(new std::vector<T>());


    status = readByteVector(val->get());
    status = readByteVectorInternal(parcel, val->get());


    if (status != OK) {
    if (status != OK) {
        val->reset();
        val->reset();
@@ -1460,6 +1492,24 @@ status_t Parcel::readByteVector(std::unique_ptr<std::vector<int8_t>>* val) const
    return status;
    return status;
}
}


}  // namespace

status_t Parcel::readByteVector(std::vector<int8_t>* val) const {
    return readByteVectorInternal(this, val);
}

status_t Parcel::readByteVector(std::vector<uint8_t>* val) const {
    return readByteVectorInternal(this, val);
}

status_t Parcel::readByteVector(std::unique_ptr<std::vector<int8_t>>* val) const {
    return readByteVectorInternalPtr(this, val);
}

status_t Parcel::readByteVector(std::unique_ptr<std::vector<uint8_t>>* val) const {
    return readByteVectorInternalPtr(this, val);
}

status_t Parcel::readInt32Vector(std::unique_ptr<std::vector<int32_t>>* val) const {
status_t Parcel::readInt32Vector(std::unique_ptr<std::vector<int32_t>>* val) const {
    return readNullableTypedVector(val, &Parcel::readInt32);
    return readNullableTypedVector(val, &Parcel::readInt32);
}
}