From 1fe9f668b65be55b50fca784f40068ee69ae8104 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Mon, 27 Oct 2025 11:14:41 +0100 Subject: [PATCH] ' --- minimake/Makefile | 27 +- minimake/minimake | Bin 0 -> 21488 bytes .../hash_map.c => hash_maps/hash_maps.c} | 2 +- .../hash_map.h => hash_maps/hash_maps.h} | 0 minimake/src/list/list_advanced.c | 101 ------ minimake/src/list/list_basic.c | 86 ----- minimake/src/list/list_ultimate.c | 138 -------- minimake/src/{list => lists}/.gitignore | 0 minimake/src/lists/lists.c | 333 ++++++++++++++++++ minimake/src/{list/list.h => lists/lists.h} | 0 minimake/src/main.c | 8 +- minimake/src/minimake.c | 4 +- minimake/src/minimake.h | 2 +- 13 files changed, 368 insertions(+), 333 deletions(-) create mode 100755 minimake/minimake rename minimake/src/{hash_map/hash_map.c => hash_maps/hash_maps.c} (99%) rename minimake/src/{hash_map/hash_map.h => hash_maps/hash_maps.h} (100%) delete mode 100644 minimake/src/list/list_advanced.c delete mode 100644 minimake/src/list/list_basic.c delete mode 100644 minimake/src/list/list_ultimate.c rename minimake/src/{list => lists}/.gitignore (100%) create mode 100644 minimake/src/lists/lists.c rename minimake/src/{list/list.h => lists/lists.h} (100%) diff --git a/minimake/Makefile b/minimake/Makefile index a1b29ea..895b2d5 100644 --- a/minimake/Makefile +++ b/minimake/Makefile @@ -1,3 +1,26 @@ -CC= gcc -CFLAGS= -std=c99 -pedantic -Werror -Wall -Wextra -Wvla +CC = gcc +CFLAGS = -std=c99 -pedantic -Werror -Wall -Wextra -Wvla +DBG_CFLAGS = -fsanitize=address -g +SRC_DIR = src +LIB_SRCS = lines/lines.c hash_maps/hash_maps.c lists/lists.c +MAIN_SRCS = main.c minimake.c + +# SRCS = $(patsubst %,$(SRC_DIR)/%, $(MAIN_SRCS)) +SRCS = $(MAIN_SRCS:%=$(SRC_DIR)/%) $(LIB_SRCS:%=$(SRC_DIR)/%) +OBJS = $(SRCS:.c=.o) + +TARGET= minimake +# DBG_TARGET = minimake-dbg + +$(TARGET): $(OBJS) + $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) + @echo $(OBJS) + +debug: CFLAGS += $(DBG_CFLAGS) +debug: $(OBJS) + $(CC) -o $(TARGET) $^ $(LDFLAGS) $(LDLIBS) + +clean: + $(RM) $(TARGET) + $(RM) $(OBJS) diff --git a/minimake/minimake b/minimake/minimake new file mode 100755 index 0000000000000000000000000000000000000000..5a2c793c9a47805f567772f1ccc009f1c8dab480 GIT binary patch literal 21488 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 TXbu)8ZTYn1_?Sb$Q5F9UDWXBq literal 0 HcmV?d00001 diff --git a/minimake/src/hash_map/hash_map.c b/minimake/src/hash_maps/hash_maps.c similarity index 99% rename from minimake/src/hash_map/hash_map.c rename to minimake/src/hash_maps/hash_maps.c index d1609d0..d97a420 100644 --- a/minimake/src/hash_map/hash_map.c +++ b/minimake/src/hash_maps/hash_maps.c @@ -1,4 +1,4 @@ -#include "hash_map.h" +#include "hash_maps.h" #include #include diff --git a/minimake/src/hash_map/hash_map.h b/minimake/src/hash_maps/hash_maps.h similarity index 100% rename from minimake/src/hash_map/hash_map.h rename to minimake/src/hash_maps/hash_maps.h diff --git a/minimake/src/list/list_advanced.c b/minimake/src/list/list_advanced.c deleted file mode 100644 index 78402d1..0000000 --- a/minimake/src/list/list_advanced.c +++ /dev/null @@ -1,101 +0,0 @@ -#include -#include -#include - -#include "list.h" - -struct list *list_insert(struct list *list, void *value, size_t index) -{ - if (list == NULL || index == 0) - { - struct list *new_elt = malloc(sizeof(struct list)); - new_elt->data = value; - new_elt->next = list; - return new_elt; - } - - struct list *elt = list; - - for (size_t i = 0; i < index - 1; i++) - { - if (elt->next == NULL) - { - break; - } - elt = elt->next; - } - - struct list *new_elt = malloc(sizeof(struct list)); - new_elt->data = value; - new_elt->next = elt->next; - elt->next = new_elt; - - return list; -} - -struct list *list_remove(struct list *list, size_t index) -{ - struct list *elt = list; - struct list *prev_elt; - - if (index == 0) - { - struct list *res = elt->next; - free(elt); - return res; - } - - for (size_t i = 0; i < index; i++) - { - if (elt == NULL) - { - return list; - } - prev_elt = elt; - elt = elt->next; - } - if (elt == NULL) - { - return list; - } - - prev_elt->next = elt->next; - free(elt); - - return list; -} - -int list_find(struct list *list, void *value) -{ - if (list == NULL) - { - return -1; - } - - int res = 0; - while (list->data != value) - { - list = list->next; - res++; - if (list == NULL) - { - return -1; - } - } - return res; -} - -struct list *list_concat(struct list *list, struct list *list2) -{ - if (list == NULL) - { - return list2; - } - struct list *elt = list; - while (elt->next != NULL) - { - elt = elt->next; - } - elt->next = list2; - return list; -} diff --git a/minimake/src/list/list_basic.c b/minimake/src/list/list_basic.c deleted file mode 100644 index a0672bb..0000000 --- a/minimake/src/list/list_basic.c +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include - -#include "list.h" - -struct list *list_prepend(struct list *list, void *value) -{ - struct list *new_elt = malloc(sizeof(struct list)); - if (new_elt == NULL) - { - return NULL; - } - new_elt->next = list; - new_elt->data = value; - - return new_elt; -} - -size_t list_length(struct list *list) -{ - size_t len = 0; - while (list != NULL) - { - len++; - list = list->next; - } - return len; -} - -// void list_print(struct list *list) -// { -// if (list == NULL) -// { -// return; -// } - -// while (list != NULL) -// { -// if (list->next != NULL) -// { -// printf("%p ", list->data); -// } -// else -// { -// printf("%p\n", list->data); -// } -// list = list->next; -// } -// } - -void list_destroy(struct list *list) -{ - struct list *elt = list; - struct list *next_elt; - while (elt != NULL) - { - next_elt = elt->next; - free(elt); - elt = next_elt; - } -} - -struct list *list_append(struct list *list, void *value) -{ - if (list == NULL) - { - struct list *new_elt = malloc(sizeof(struct list)); - new_elt->data = value; - new_elt->next = NULL; - return new_elt; - } - - struct list *elt = list; - - while (elt->next != NULL) - { - elt = elt->next; - } - - struct list *new_elt = malloc(sizeof(struct list)); - new_elt->data = value; - new_elt->next = NULL; - elt->next = new_elt; - - return list; -} diff --git a/minimake/src/list/list_ultimate.c b/minimake/src/list/list_ultimate.c deleted file mode 100644 index d4a57f3..0000000 --- a/minimake/src/list/list_ultimate.c +++ /dev/null @@ -1,138 +0,0 @@ -#include -#include - -#include "list.h" - -void swap_next(struct list *elt) -{ - void *c = elt->next->data; - elt->next->data = elt->data; - elt->data = c; -} -struct list *list_sort(struct list *list) -{ - // Bubble sort go ! - if (list == NULL) - { - return list; - } - struct list *elt = list; - int len = 0; - while (elt->next != NULL) - { - if (elt->data > elt->next->data) - { - swap_next(elt); - } - elt = elt->next; - len++; - } - - for (int i = 1; i < len; i++) - { - elt = list; - while (elt->next != NULL) - { - if (elt->data > elt->next->data) - { - swap_next(elt); - } - elt = elt->next; - } - } - - return list; -} - -// Old proto -// WARNING no malloc/free allowed (moulinette issue) -struct list *list_reverse(struct list *list) -{ - if (list == NULL) - { - return list; - } - - // Get len - struct list *elt = list; - int len = 0; - while (elt->next != NULL) - { - len++; - elt = elt->next; - } - elt = list; - - // Bring each elt to end - for (int i = 0; i < len; i++) - { - elt = list; - for (int j = 0; j < len - i; j++) - { - swap_next(elt); - elt = elt->next; - } - } - - return list; -} - -// Doesn't work neither -// struct list *list_reverse(struct list *list) -// { -// struct list *new_list = NULL; -// struct list *elt = list; -// while (elt != NULL) -// { -// struct list *new_elt = malloc(sizeof(struct list)); -// if (new_elt == NULL) -// { -// return NULL; -// } -// new_elt->data = elt->data; -// new_elt->next = new_list; - -// struct list *next_elt = elt->next; -// free(elt); -// elt = next_elt; -// } -// return new_list; -// } - -// Moulinette issue -// struct list *list_reverse(struct list *list) -// { -// if (list == NULL) -// { -// return list; -// } - -// struct list *new_list = NULL; -// while (list != NULL) -// { -// new_list = list_prepend(new_list, list->data); -// list = list_remove(list, 0); -// } - -// return new_list; -// } - -struct list *list_split(struct list *list, size_t index) -{ - struct list *elt = list; - for (size_t i = 0; i < index; i++) - { - if (elt == NULL) - { - return NULL; - } - elt = elt->next; - } - if (elt == NULL) - { - return NULL; - } - struct list *res = elt->next; - elt->next = NULL; - return res; -} diff --git a/minimake/src/list/.gitignore b/minimake/src/lists/.gitignore similarity index 100% rename from minimake/src/list/.gitignore rename to minimake/src/lists/.gitignore diff --git a/minimake/src/lists/lists.c b/minimake/src/lists/lists.c new file mode 100644 index 0000000..aa355a1 --- /dev/null +++ b/minimake/src/lists/lists.c @@ -0,0 +1,333 @@ +#include "lists.h" + +#include +#include +#include + +struct list *list_prepend(struct list *list, void *value) +{ + struct list *new_elt = malloc(sizeof(struct list)); + if (new_elt == NULL) + { + return NULL; + } + new_elt->next = list; + new_elt->data = value; + + return new_elt; +} + +size_t list_length(struct list *list) +{ + size_t len = 0; + while (list != NULL) + { + len++; + list = list->next; + } + return len; +} + +// void list_print(struct list *list) +// { +// if (list == NULL) +// { +// return; +// } + +// while (list != NULL) +// { +// if (list->next != NULL) +// { +// printf("%p ", list->data); +// } +// else +// { +// printf("%p\n", list->data); +// } +// list = list->next; +// } +// } + +void list_destroy(struct list *list) +{ + struct list *elt = list; + struct list *next_elt; + while (elt != NULL) + { + next_elt = elt->next; + free(elt); + elt = next_elt; + } +} + +struct list *list_append(struct list *list, void *value) +{ + if (list == NULL) + { + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->data = value; + new_elt->next = NULL; + return new_elt; + } + + struct list *elt = list; + + while (elt->next != NULL) + { + elt = elt->next; + } + + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->data = value; + new_elt->next = NULL; + elt->next = new_elt; + + return list; +} + +/* + * + ******************* + * Advanced * + ******************* + * + */ + +struct list *list_insert(struct list *list, void *value, size_t index) +{ + if (list == NULL || index == 0) + { + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->data = value; + new_elt->next = list; + return new_elt; + } + + struct list *elt = list; + + for (size_t i = 0; i < index - 1; i++) + { + if (elt->next == NULL) + { + break; + } + elt = elt->next; + } + + struct list *new_elt = malloc(sizeof(struct list)); + new_elt->data = value; + new_elt->next = elt->next; + elt->next = new_elt; + + return list; +} + +struct list *list_remove(struct list *list, size_t index) +{ + struct list *elt = list; + struct list *prev_elt; + + if (index == 0) + { + struct list *res = elt->next; + free(elt); + return res; + } + + for (size_t i = 0; i < index; i++) + { + if (elt == NULL) + { + return list; + } + prev_elt = elt; + elt = elt->next; + } + if (elt == NULL) + { + return list; + } + + prev_elt->next = elt->next; + free(elt); + + return list; +} + +int list_find(struct list *list, void *value) +{ + if (list == NULL) + { + return -1; + } + + int res = 0; + while (list->data != value) + { + list = list->next; + res++; + if (list == NULL) + { + return -1; + } + } + return res; +} + +struct list *list_concat(struct list *list, struct list *list2) +{ + if (list == NULL) + { + return list2; + } + struct list *elt = list; + while (elt->next != NULL) + { + elt = elt->next; + } + elt->next = list2; + return list; +} + +/* + * + ****************** + * Ultimate * + ****************** + * + */ + +static void swap_next(struct list *elt) +{ + void *c = elt->next->data; + elt->next->data = elt->data; + elt->data = c; +} +struct list *list_sort(struct list *list) +{ + // Bubble sort go ! + if (list == NULL) + { + return list; + } + struct list *elt = list; + int len = 0; + while (elt->next != NULL) + { + if (elt->data > elt->next->data) + { + swap_next(elt); + } + elt = elt->next; + len++; + } + + for (int i = 1; i < len; i++) + { + elt = list; + while (elt->next != NULL) + { + if (elt->data > elt->next->data) + { + swap_next(elt); + } + elt = elt->next; + } + } + + return list; +} + +// Old proto +// WARNING no malloc/free allowed (moulinette issue) +struct list *list_reverse(struct list *list) +{ + if (list == NULL) + { + return list; + } + + // Get len + struct list *elt = list; + int len = 0; + while (elt->next != NULL) + { + len++; + elt = elt->next; + } + elt = list; + + // Bring each elt to end + for (int i = 0; i < len; i++) + { + elt = list; + for (int j = 0; j < len - i; j++) + { + swap_next(elt); + elt = elt->next; + } + } + + return list; +} + +// Doesn't work neither +// struct list *list_reverse(struct list *list) +// { +// struct list *new_list = NULL; +// struct list *elt = list; +// while (elt != NULL) +// { +// struct list *new_elt = malloc(sizeof(struct list)); +// if (new_elt == NULL) +// { +// return NULL; +// } +// new_elt->data = elt->data; +// new_elt->next = new_list; + +// struct list *next_elt = elt->next; +// free(elt); +// elt = next_elt; +// } +// return new_list; +// } + +// Moulinette issue +// struct list *list_reverse(struct list *list) +// { +// if (list == NULL) +// { +// return list; +// } + +// struct list *new_list = NULL; +// while (list != NULL) +// { +// new_list = list_prepend(new_list, list->data); +// list = list_remove(list, 0); +// } + +// return new_list; +// } + +struct list *list_split(struct list *list, size_t index) +{ + struct list *elt = list; + for (size_t i = 0; i < index; i++) + { + if (elt == NULL) + { + return NULL; + } + elt = elt->next; + } + if (elt == NULL) + { + return NULL; + } + struct list *res = elt->next; + elt->next = NULL; + return res; +} diff --git a/minimake/src/list/list.h b/minimake/src/lists/lists.h similarity index 100% rename from minimake/src/list/list.h rename to minimake/src/lists/lists.h diff --git a/minimake/src/main.c b/minimake/src/main.c index e3abfb9..8a9362a 100644 --- a/minimake/src/main.c +++ b/minimake/src/main.c @@ -11,7 +11,7 @@ // Look at perror for stdlib functions // Create an enum for error handling -int handle_args(int argc, char **argv) +static int handle_args(int argc, char **argv) { int flags = 0; for (int i = 1; i < argc; i++) @@ -25,7 +25,11 @@ int handle_args(int argc, char **argv) else errx(INVALID_ARG, ": Pleaase give an argument"); } + printf("%s: done", argv[0]); + return flags; } int main(int argc, char **argv) -{} +{ + return handle_args(argc, argv); +} diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index e922791..fa87c7b 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -8,9 +8,9 @@ #include #include -#include "hash_map/hash_map.h" +#include "hash_maps/hash_maps.h" #include "lines/lines.h" -#include "list/list.h" +#include "lists/lists.h" // Static variables struct hash_map *variables = NULL; diff --git a/minimake/src/minimake.h b/minimake/src/minimake.h index b04155e..b5cf465 100644 --- a/minimake/src/minimake.h +++ b/minimake/src/minimake.h @@ -6,7 +6,7 @@ #include -#include "list/list.h" +#include "lists/lists.h" // Holds variable information // WARNING its values must be freed after use