]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
expo: Set the initial next_id to 1
authorSimon Glass <sjg@chromium.org>
Mon, 14 Oct 2024 22:31:56 +0000 (16:31 -0600)
committerSimon Glass <sjg@chromium.org>
Fri, 18 Oct 2024 20:10:22 +0000 (14:10 -0600)
If expo_set_dynamic_start() is never called, the first scene created
will have an ID of 0, which is invalid. Correct this by setting a
default value.

Add a test to check this.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/expo.c
test/boot/expo.c

index c7ce19e834b530e6573cbe56c703a979192d41dd..700786ec0cc06c85837743ec8ee32423dfc058be 100644 (file)
@@ -29,6 +29,7 @@ int expo_new(const char *name, void *priv, struct expo **expp)
        exp->priv = priv;
        INIT_LIST_HEAD(&exp->scene_head);
        INIT_LIST_HEAD(&exp->str_head);
+       exp->next_id = 1;
 
        *expp = exp;
 
index 9b4aa803eb16b654364d432ab58820af69856c2c..f6a6b4fd2cbfb5e555cb1786a09d7f597446a63b 100644 (file)
@@ -91,7 +91,7 @@ static int expo_base(struct unit_test_state *uts)
        *name = '\0';
        ut_assertnonnull(exp);
        ut_asserteq(0, exp->scene_id);
-       ut_asserteq(0, exp->next_id);
+       ut_asserteq(1, exp->next_id);
 
        /* Make sure the name was allocated */
        ut_assertnonnull(exp->name);
@@ -130,7 +130,7 @@ static int expo_scene(struct unit_test_state *uts)
        ut_assertok(expo_new(EXPO_NAME, NULL, &exp));
 
        scn = NULL;
-       ut_asserteq(0, exp->next_id);
+       ut_asserteq(1, exp->next_id);
        strcpy(name, SCENE_NAME1);
        id = scene_new(exp, name, SCENE1, &scn);
        *name = '\0';
@@ -167,6 +167,25 @@ static int expo_scene(struct unit_test_state *uts)
 }
 BOOTSTD_TEST(expo_scene, UTF_DM | UTF_SCAN_FDT);
 
+/* Check creating a scene with no ID */
+static int expo_scene_no_id(struct unit_test_state *uts)
+{
+       struct scene *scn;
+       struct expo *exp;
+       char name[100];
+       int id;
+
+       ut_assertok(expo_new(EXPO_NAME, NULL, &exp));
+       ut_asserteq(1, exp->next_id);
+
+       strcpy(name, SCENE_NAME1);
+       id = scene_new(exp, SCENE_NAME1, 0, &scn);
+       ut_asserteq(1, scn->id);
+
+       return 0;
+}
+BOOTSTD_TEST(expo_scene_no_id, UTF_DM | UTF_SCAN_FDT);
+
 /* Check creating a scene with objects */
 static int expo_object(struct unit_test_state *uts)
 {