From d51280f10bb06a2d7abb8bd2980415733673c88b Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Tue, 7 Feb 2012 18:54:03 -0800 Subject: [PATCH] Fix bug in generated code for functions with inband data from pointers. Passing zero length data would desync return command stream. Change-Id: I273a6a44636a203d8305ddff3d6607eae9f9ec8a --- libs/rs/rsg_generator.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/rs/rsg_generator.c b/libs/rs/rsg_generator.c index 7a90597ca5818..385c8b58935b1 100644 --- a/libs/rs/rsg_generator.c +++ b/libs/rs/rsg_generator.c @@ -465,7 +465,14 @@ void printPlaybackCpp(FILE *f) { fprintf(f, ");\n"); if (hasInlineDataPointers(api)) { - fprintf(f, " if (cmdSizeBytes == sizeof(RS_CMD_%s)) {\n", api->name); + fprintf(f, " size_t totalSize = 0;\n"); + for (ct2=0; ct2 < api->paramCount; ct2++) { + if (api->params[ct2].ptrLevel) { + fprintf(f, " totalSize += cmd->%s_length;\n", api->params[ct2].name); + } + } + + fprintf(f, " if ((totalSize != 0) && (cmdSizeBytes == sizeof(RS_CMD_%s))) {\n", api->name); fprintf(f, " con->mIO.coreSetReturn(NULL, 0);\n"); fprintf(f, " }\n"); } else if (api->ret.typeName[0]) {