pick up wakaama files from https://github.com/eclipse/wakaama

Revision:
0:c2dff8cbb91a
diff -r 000000000000 -r c2dff8cbb91a core/list.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/list.c	Wed Apr 19 11:27:34 2017 +0000
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ *
+ * Copyright (c) 2013 Intel Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Eclipse Distribution License v1.0 which accompany this distribution.
+ *
+ * The Eclipse Public License is available at
+ *    http://www.eclipse.org/legal/epl-v10.html
+ * The Eclipse Distribution License is available at
+ *    http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *    David Navarro, Intel Corporation - initial API and implementation
+ *    
+ *******************************************************************************/
+
+#include "internals.h"
+
+
+lwm2m_list_t * lwm2m_list_add(lwm2m_list_t * head,
+                              lwm2m_list_t * node)
+{
+    lwm2m_list_t * target;
+
+    if (NULL == head) return node;
+
+    if (head->id > node->id)
+    {
+        node->next = head;
+        return node;
+    }
+
+    target = head;
+    while (NULL != target->next && target->next->id < node->id)
+    {
+        target = target->next;
+    }
+
+    node->next = target->next;
+    target->next = node;
+
+    return head;
+}
+
+
+lwm2m_list_t * lwm2m_list_find(lwm2m_list_t * head,
+                               uint16_t id)
+{
+    while (NULL != head && head->id < id)
+    {
+        head = head->next;
+    }
+
+    if (NULL != head && head->id == id) return head;
+
+    return NULL;
+}
+
+
+lwm2m_list_t * lwm2m_list_remove(lwm2m_list_t * head,
+                                 uint16_t id,
+                                 lwm2m_list_t ** nodeP)
+{
+    lwm2m_list_t * target;
+
+    if (head == NULL)
+    {
+        if (nodeP) *nodeP = NULL;
+        return NULL;
+    }
+
+    if (head->id == id)
+    {
+        if (nodeP) *nodeP = head;
+        return head->next;
+    }
+
+    target = head;
+    while (NULL != target->next && target->next->id < id)
+    {
+        target = target->next;
+    }
+
+    if (NULL != target->next && target->next->id == id)
+    {
+        if (nodeP) *nodeP = target->next;
+        target->next = target->next->next;
+    }
+    else
+    {
+        if (nodeP) *nodeP = NULL;
+    }
+
+    return head;
+}
+
+uint16_t lwm2m_list_newId(lwm2m_list_t * head)
+{
+    uint16_t id;
+    lwm2m_list_t * target;
+
+    id = 0;
+    target = head;
+
+    while (target != NULL && id == target->id)
+    {
+        id = target->id + 1;
+        target = target->next;
+    }
+
+    return id;
+}
+
+void lwm2m_list_free(lwm2m_list_t * head)
+{
+    if (head != NULL)
+    {
+        lwm2m_list_t * nextP;
+
+        nextP = head->next;
+        lwm2m_free(head);
+        lwm2m_list_free(nextP);
+    }
+}