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

Commit ab203130 authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "Make IEffect command more robust (second try)" into klp-dev

parents 74888428 25a63442
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -85,13 +85,15 @@ public:
        data.writeInt32(size);

        status_t status = remote()->transact(COMMAND, data, &reply);
        if (status == NO_ERROR) {
            status = reply.readInt32();
        }
        if (status != NO_ERROR) {
            if (pReplySize != NULL)
                *pReplySize = 0;
            return status;
        }

        status = reply.readInt32();
        size = reply.readInt32();
        if (size != 0 && pReplyData != NULL && pReplySize != NULL) {
            reply.read(pReplyData, size);
@@ -152,6 +154,10 @@ status_t BnEffect::onTransact(
            char *cmd = NULL;
            if (cmdSize) {
                cmd = (char *)calloc(cmdSize, 1);
                if (cmd == NULL) {
                    reply->writeInt32(NO_MEMORY);
                    return NO_ERROR;
                }
                data.read(cmd, cmdSize);
            }
            uint32_t replySize = data.readInt32();
@@ -159,9 +165,15 @@ status_t BnEffect::onTransact(
            char *resp = NULL;
            if (replySize) {
                resp = (char *)calloc(replySize, 1);
                if (resp == NULL) {
                    free(cmd);
                    reply->writeInt32(NO_MEMORY);
                    return NO_ERROR;
                }
            }
            status_t status = command(cmdCode, cmdSize, cmd, &replySz, resp);
            reply->writeInt32(status);
            if (status == NO_ERROR) {
                if (replySz < replySize) {
                    replySize = replySz;
                }
@@ -169,6 +181,7 @@ status_t BnEffect::onTransact(
                if (replySize) {
                    reply->write(resp, replySize);
                }
            }
            if (cmd) {
                free(cmd);
            }