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

Commit e4a9b990 authored by Steven Moreland's avatar Steven Moreland Committed by android-build-merger
Browse files

Merge changes from topic "ndk-aidl-parcelable-array" am: 0dd82d8d

am: a8588c36

Change-Id: If82faee4c5b98f1052751aa73a1d700281373ec9
parents a7e936f6 a8588c36
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -23,6 +23,8 @@ cc_library {
        "include_apex",
        "include_apex",
    ],
    ],


    cflags: ["-Wall", "-Wextra", "-Werror"],

    srcs: [
    srcs: [
        "ibinder.cpp",
        "ibinder.cpp",
        "ibinder_jni.cpp",
        "ibinder_jni.cpp",
+1 −1
Original line number Original line Diff line number Diff line
@@ -149,7 +149,7 @@ typedef bool (*AParcel_stringArrayElementAllocator)(void* arrayData, size_t inde
 * not required to be null-terminated. If the object at index is null, then this should be null.
 * not required to be null-terminated. If the object at index is null, then this should be null.
 */
 */
typedef const char* (*AParcel_stringArrayElementGetter)(const void* arrayData, size_t index,
typedef const char* (*AParcel_stringArrayElementGetter)(const void* arrayData, size_t index,
                                                        size_t* outLength);
                                                        int32_t* outLength);


/**
/**
 * This is called to allocate an array of size 'length'. If length is -1, then a 'null' array (or
 * This is called to allocate an array of size 'length'. If length is -1, then a 'null' array (or
+2 −2
Original line number Original line Diff line number Diff line
@@ -299,7 +299,7 @@ static inline bool AParcel_stdVectorStringElementAllocator(void* vectorData, siz
 * index.
 * index.
 */
 */
static inline const char* AParcel_stdVectorStringElementGetter(const void* vectorData, size_t index,
static inline const char* AParcel_stdVectorStringElementGetter(const void* vectorData, size_t index,
                                                               size_t* outLength) {
                                                               int32_t* outLength) {
    const std::vector<std::string>* vec = static_cast<const std::vector<std::string>*>(vectorData);
    const std::vector<std::string>* vec = static_cast<const std::vector<std::string>*>(vectorData);
    const std::string& element = vec->at(index);
    const std::string& element = vec->at(index);


@@ -327,7 +327,7 @@ static inline bool AParcel_nullableStdVectorStringElementAllocator(void* vectorD
 */
 */
static inline const char* AParcel_nullableStdVectorStringElementGetter(const void* vectorData,
static inline const char* AParcel_nullableStdVectorStringElementGetter(const void* vectorData,
                                                                       size_t index,
                                                                       size_t index,
                                                                       size_t* outLength) {
                                                                       int32_t* outLength) {
    const std::optional<std::vector<std::optional<std::string>>>* vec =
    const std::optional<std::vector<std::optional<std::string>>>* vec =
            static_cast<const std::optional<std::vector<std::optional<std::string>>>*>(vectorData);
            static_cast<const std::optional<std::vector<std::optional<std::string>>>*>(vectorData);
    const std::optional<std::string>& element = vec->value().at(index);
    const std::optional<std::string>& element = vec->value().at(index);
+7 −7
Original line number Original line Diff line number Diff line
@@ -173,7 +173,7 @@ binder_status_t WriteArray(AParcel* parcel, const void* arrayData, int32_t lengt


    Parcel* rawParcel = parcel->get();
    Parcel* rawParcel = parcel->get();


    for (size_t i = 0; i < length; i++) {
    for (int32_t i = 0; i < length; i++) {
        status = (rawParcel->*write)(getter(arrayData, i));
        status = (rawParcel->*write)(getter(arrayData, i));


        if (status != STATUS_OK) return PruneStatusT(status);
        if (status != STATUS_OK) return PruneStatusT(status);
@@ -197,7 +197,7 @@ binder_status_t ReadArray(const AParcel* parcel, void* arrayData, ArrayAllocator


    if (length <= 0) return STATUS_OK;
    if (length <= 0) return STATUS_OK;


    for (size_t i = 0; i < length; i++) {
    for (int32_t i = 0; i < length; i++) {
        T readTarget;
        T readTarget;
        status = (rawParcel->*read)(&readTarget);
        status = (rawParcel->*read)(&readTarget);
        if (status != STATUS_OK) return PruneStatusT(status);
        if (status != STATUS_OK) return PruneStatusT(status);
@@ -376,8 +376,8 @@ binder_status_t AParcel_writeStringArray(AParcel* parcel, const void* arrayData,
    if (status != STATUS_OK) return status;
    if (status != STATUS_OK) return status;
    if (length <= 0) return STATUS_OK;
    if (length <= 0) return STATUS_OK;


    for (size_t i = 0; i < length; i++) {
    for (int32_t i = 0; i < length; i++) {
        size_t elementLength = 0;
        int32_t elementLength = 0;
        const char* str = getter(arrayData, i, &elementLength);
        const char* str = getter(arrayData, i, &elementLength);
        if (str == nullptr && elementLength != -1) return STATUS_BAD_VALUE;
        if (str == nullptr && elementLength != -1) return STATUS_BAD_VALUE;


@@ -392,7 +392,7 @@ binder_status_t AParcel_writeStringArray(AParcel* parcel, const void* arrayData,
// allocator.
// allocator.
struct StringArrayElementAllocationAdapter {
struct StringArrayElementAllocationAdapter {
    void* arrayData;  // stringData from the NDK
    void* arrayData;  // stringData from the NDK
    size_t index;     // index into the string array
    int32_t index;    // index into the string array
    AParcel_stringArrayElementAllocator elementAllocator;
    AParcel_stringArrayElementAllocator elementAllocator;


    static bool Allocator(void* stringData, int32_t length, char** buffer) {
    static bool Allocator(void* stringData, int32_t length, char** buffer) {
@@ -441,7 +441,7 @@ binder_status_t AParcel_writeParcelableArray(AParcel* parcel, const void* arrayD
    if (status != STATUS_OK) return status;
    if (status != STATUS_OK) return status;
    if (length <= 0) return STATUS_OK;
    if (length <= 0) return STATUS_OK;


    for (size_t i = 0; i < length; i++) {
    for (int32_t i = 0; i < length; i++) {
        binder_status_t status = elementWriter(parcel, arrayData, i);
        binder_status_t status = elementWriter(parcel, arrayData, i);
        if (status != STATUS_OK) return status;
        if (status != STATUS_OK) return status;
    }
    }
@@ -464,7 +464,7 @@ binder_status_t AParcel_readParcelableArray(const AParcel* parcel, void* arrayDa


    if (length == -1) return STATUS_OK;  // null array
    if (length == -1) return STATUS_OK;  // null array


    for (size_t i = 0; i < length; i++) {
    for (int32_t i = 0; i < length; i++) {
        binder_status_t status = elementReader(parcel, arrayData, i);
        binder_status_t status = elementReader(parcel, arrayData, i);
        if (status != STATUS_OK) return status;
        if (status != STATUS_OK) return status;
    }
    }