From 687faae61cddf439f831527c33ec82b9b79589ea Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Sat, 14 Apr 2018 01:50:28 +0200 Subject: Add simple chained management lib Change-Id: I9aa2e5c4da375a124a6be43d5738414b80e0567e Signed-off-by: Romain Forlot --- src/CMakeLists.txt | 1 + src/utils/list.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/utils/list.h | 36 ++++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 src/utils/list.c create mode 100644 src/utils/list.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c83a11b..7c8c2b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,7 @@ PROJECT_TARGET_ADD(harvester) plugins/influxdb.c plugins/influxdb-writer.c plugins/influxdb-reader.c + utils/list.c ) set(OPENAPI_DEF "harvester-apidef" CACHE STRING "name and path to the JSON API definition without extension") 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" + * + * 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; +} diff --git a/src/utils/list.h b/src/utils/list.h new file mode 100644 index 0000000..dcb01bd --- /dev/null +++ b/src/utils/list.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 "IoT.bzh" + * Author "Romain Forlot" + * + * 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. + */ +#ifndef _LIST_H_ +#define _LIST_H_ + +#include +#include + +struct list { + const char *key; + json_object *value; + struct list *next; +}; + +void destroy_list(struct list *l); +void add_elt(struct list *l, const char *key, json_object *value); +void add_key(struct list *l, const char *key); +struct list *get_elt(struct list *l, int index); +struct list *find_elt_from_key(struct list *l, const char *key); +json_object *find_key_value(struct list *l, const char *key); + +#endif -- cgit 1.2.3-korg