diff options
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/list.c | 112 | ||||
-rw-r--r-- | src/utils/list.h | 37 |
2 files changed, 149 insertions, 0 deletions
diff --git a/src/utils/list.c b/src/utils/list.c new file mode 100644 index 0000000..d47f761 --- /dev/null +++ b/src/utils/list.c @@ -0,0 +1,112 @@ +/* + * 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; + } +} + +int set_value(struct list *l, json_object *val, int index) +{ + int i; + + for (i = 0; i < index; i++) { + l = l->next; + if ( l == NULL ) + return -1; + } + + l->value = val; + return 0; +} + +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..9f93cb6 --- /dev/null +++ b/src/utils/list.h @@ -0,0 +1,37 @@ +/* + * 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. + */ +#ifndef _LIST_H_ +#define _LIST_H_ + +#include <stdlib.h> +#include <json-c/json.h> + +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); +int set_value(struct list *l, json_object *val, int index); +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 |