diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2018-04-14 01:50:28 +0200 |
---|---|---|
committer | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2018-07-10 23:41:14 +0200 |
commit | 687faae61cddf439f831527c33ec82b9b79589ea (patch) | |
tree | 22c03e14a015b784aa09fbf18543a8955d4e7de5 /src/utils/list.c | |
parent | dbe60c0125a1b8b7c967049a699930ca893c3271 (diff) |
Add simple chained management lib
Change-Id: I9aa2e5c4da375a124a6be43d5738414b80e0567e
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src/utils/list.c')
-rw-r--r-- | src/utils/list.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/utils/list.c b/src/utils/list.c new file mode 100644 index 0000000..da97e42 --- /dev/null +++ b/src/utils/list.c @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2018 "IoT.bzh" + * Author "Romain Forlot" <romain.forlot@iot.bzh> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "list.h" +#include "string.h" + +void destroy_list(struct list *l) +{ + struct list *save; + while(l != NULL) { + save = l->next; + free(l); + l = save; + } +} + +void add_elt(struct list *l, const char *key, json_object *value) +{ + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->key = key; + new_elt->value = value; + new_elt->next = NULL; + + if(l) { + while(l->next != NULL) { + l = l->next; + } + l->next = new_elt; + } + else { + l = new_elt; + } +} + +void add_key(struct list *l, const char *key) +{ + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->key = key; + new_elt->value = NULL; + new_elt->next = NULL; + + if(l) { + while(l->next != NULL) { + l = l->next; + } + l->next = new_elt; + } + else { + l = new_elt; + } +} + +struct list *get_elt(struct list *l, int index) +{ + int i; + + for (i = 0; i < index; i++) { + l = l->next; + if ( l == NULL ) + return NULL; + } + + return l; +} + +struct list *find_elt_from_key(struct list *l, const char *key) +{ + while(l != NULL) { + if(strcasecmp(l->key, key) == 0) + return l; + l = l->next; + } + return NULL; +} + +json_object *find_key_value(struct list *l, const char *key) +{ + while(l != NULL) { + if(strcasecmp(l->key, key) == 0) + return l->value; + l = l->next; + } + return NULL; +} |