diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/list.c | 69 | ||||
-rw-r--r-- | src/list.h | 40 |
2 files changed, 109 insertions, 0 deletions
diff --git a/src/list.c b/src/list.c new file mode 100644 index 0000000..b73280f --- /dev/null +++ b/src/list.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2023 Johnny Richard + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +#include "list.h" + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static list_t * +list_alloc(void) +{ + list_t *list = (list_t *)malloc(sizeof(list_t)); + if (list == NULL) { + fprintf(stderr, "list_alloc: Out of memory %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + return list; +} + +list_t * +list_new(void) +{ + return NULL; +} + +void +list_prepend(list_t **list, void *data) +{ + list_t *new_list = list_alloc(); + new_list->data = data; + new_list->next = *list; + *list = new_list; +} + +size_t +list_get_size(list_t *list) +{ + size_t size = 0; + while (list != NULL) { + list = list->next; + size++; + } + return size; +} + +void +list_destroy(list_t *list) +{ + while (list != NULL) { + list_t *previous = list; + list = list->next; + free(previous); + } +} diff --git a/src/list.h b/src/list.h new file mode 100644 index 0000000..efe5720 --- /dev/null +++ b/src/list.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2023 Johnny Richard + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ +#ifndef LIST_H +#define LIST_H + +#include <stdlib.h> + +typedef struct list_t +{ + void *data; + struct list_t *next; +} list_t; + +list_t * +list_new(void); + +void +list_prepend(list_t **list, void *data); + +size_t +list_get_size(list_t *list); + +void +list_destroy(list_t *list); + +#endif /* LIST_H */ |