summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2021-10-01 18:23:25 -0500
committerBjorn Andersson <bjorn.andersson@linaro.org>2021-10-04 12:28:56 -0500
commit26191dc4a97f1434d14f8a579be4634c07192ea4 (patch)
treea213f1e75da6f68ae2dc148aa2c09cf2777575dd
parent69f032f38066f9d72f2d1575b084510f1fd5578a (diff)
parser: reset fixed flag each for each array
If a message contains an array, we need to reset the flag that indicates whether it is a fixed array or not each time through the loop parsing message members. Otherwise a non-fixed array declared after a fixed array will be marked as fixed. Drop the "int" in the definition of the array_size local varaible in qmi_message_parse() to be consistent with the rest of the program. Signed-off-by: Alex Elder <elder@linaro.org> Message-Id: <20211001232338.769309-22-elder@linaro.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
-rw-r--r--parser.c9
-rw-r--r--tests/fixed.qmi17
2 files changed, 22 insertions, 4 deletions
diff --git a/parser.c b/parser.c
index 2f3aa5c..7e93175 100644
--- a/parser.c
+++ b/parser.c
@@ -325,8 +325,8 @@ static void qmi_message_parse(enum message_type message_type)
struct token type_tok;
struct token num_tok;
struct token id_tok;
- unsigned int array_size;
- bool array_fixed = false;
+ unsigned array_size;
+ bool array_fixed;
bool required;
token_expect(TOK_ID, &msg_id_tok);
@@ -352,14 +352,15 @@ static void qmi_message_parse(enum message_type message_type)
token_expect(TOK_NUM, &num_tok);
array_size = num_tok.num;
token_expect(']', NULL);
-
array_fixed = true;
- } else if(token_accept('(', NULL)) {
+ } else if (token_accept('(', NULL)) {
token_expect(TOK_NUM, &num_tok);
array_size = num_tok.num;
token_expect(')', NULL);
+ array_fixed = false;
} else {
array_size = 0;
+ array_fixed = false;
}
token_expect('=', NULL);
diff --git a/tests/fixed.qmi b/tests/fixed.qmi
new file mode 100644
index 0000000..c6376ed
--- /dev/null
+++ b/tests/fixed.qmi
@@ -0,0 +1,17 @@
+package test;
+
+struct qmi_result {
+ u16 result;
+ u16 error;
+};
+
+request test_request {
+ optional u8 variable(5) = 0x1;
+ optional u16 fixed[5] = 0x2;
+ # The next field should have array_type VAR_LEN_ARRAY
+ optional u32 not_fixed(5) = 0x3;
+} = 0x23;
+
+response test_response {
+ required qmi_result r = 2;
+} = 043;