fix uci_list_set_pos to reorder sections properly, even when moving a section to...
[project/uci.git] / list.c
diff --git a/list.c b/list.c
index 9917971..c8a4700 100644 (file)
--- a/list.c
+++ b/list.c
@@ -19,11 +19,12 @@ static void uci_list_set_pos(struct uci_list *head, struct uci_list *ptr, int po
 
        uci_list_del(ptr);
        uci_foreach_element(head, p) {
-               new_head = &p->list;
                if (pos-- <= 0)
                        break;
+               new_head = &p->list;
        }
-       uci_list_add(new_head, ptr);
+
+       uci_list_add(new_head->next, ptr);
 }
 
 static inline void uci_list_fixup(struct uci_list *ptr)
@@ -358,6 +359,18 @@ done:
 }
 
 int
+uci_lookup_next(struct uci_context *ctx, struct uci_element **e, struct uci_list *list, const char *name)
+{
+       UCI_HANDLE_ERR(ctx);
+
+       *e = uci_lookup_list(list, name);
+       if (!*e)
+               UCI_THROW(ctx, UCI_ERR_NOTFOUND);
+
+       return 0;
+}
+
+int
 uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *str, bool extended)
 {
        struct uci_element *e;