From 1efc35a59ec7c8617378e5765c61e7c831d8c640 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 31 Oct 2025 22:31:08 +0100 Subject: [PATCH 1/8] JUSTOCASOUUUU --- minimake/Makefile | 8 +++--- minimake/src/files/files.h | 7 ++--- minimake/src/hash_maps/hash_maps.h | 2 +- minimake/src/lines/lines.c | 42 ++++++++++++++++++++++++++++++ minimake/src/lines/lines.h | 12 ++++----- minimake/src/lists/.gitignore | 1 - minimake/src/lists/lists.h | 16 ++++++------ minimake/src/minimake.c | 5 ++-- minimake/src/minimake.h | 6 ++--- 9 files changed, 70 insertions(+), 29 deletions(-) delete mode 100644 minimake/src/lists/.gitignore diff --git a/minimake/Makefile b/minimake/Makefile index db29234..cb0ae0a 100644 --- a/minimake/Makefile +++ b/minimake/Makefile @@ -21,10 +21,10 @@ $(TARGET): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) @echo $(OBJS) -debug: CFLAGS += $(DBG_CFLAGS) -debug: LDFLAGS += $(DBG_LDFLAGS) -debug: $(OBJS) - $(CC) -o $(TARGET) $^ $(LDFLAGS) $(LDLIBS) +# debug: CFLAGS += $(DBG_CFLAGS) +# debug: LDFLAGS += $(DBG_LDFLAGS) +# debug: $(OBJS) +# $(CC) -o $(TARGET) $^ $(LDFLAGS) $(LDLIBS) check: dash ./tests/run.sh diff --git a/minimake/src/files/files.h b/minimake/src/files/files.h index da7c555..d4893c3 100644 --- a/minimake/src/files/files.h +++ b/minimake/src/files/files.h @@ -3,11 +3,12 @@ #define _XOPEN_SOURCE 500 -#include "../lists/lists.h" #include -char* get_makefile(struct list *files); -ssize_t get_file_lastmodiftime(char* filename); +#include "../lists/lists.h" + +char *get_makefile(struct list *files); +ssize_t get_file_lastmodiftime(char *filename); int run_command(char *command); int file_exists(char *filename); diff --git a/minimake/src/hash_maps/hash_maps.h b/minimake/src/hash_maps/hash_maps.h index 97a84da..634c993 100644 --- a/minimake/src/hash_maps/hash_maps.h +++ b/minimake/src/hash_maps/hash_maps.h @@ -24,7 +24,7 @@ struct hash_map size_t hash(const char *str); struct hash_map *hashmap_init(size_t size); bool hashmap_insert(struct hash_map *hash_map, char *key, void *value, - bool *updated); + bool *updated); void hashmap_free(struct hash_map *hash_map); void hashmap_dump(struct hash_map *hash_map); void *hashmap_get(const struct hash_map *hash_map, char *key); diff --git a/minimake/src/lines/lines.c b/minimake/src/lines/lines.c index fcd33e1..238b576 100644 --- a/minimake/src/lines/lines.c +++ b/minimake/src/lines/lines.c @@ -219,3 +219,45 @@ size_t read_declaration(struct line *line, size_t index, char **word) *word = res; return i - index; } + +// Takes a string, expands its variables and returns the resulting buffer +// WARNING allocates the result on the heap, free result after use +char *expand_str(char *str) +{ + size_t str_i = 0; + size_t buf_i = 0; + size_t buf_size = BUFFER_SIZE; + char *buf = malloc(BUFFER_SIZE * sizeof(char)); + while (str[str_i] != '\0') + { + // Reallocate more space if necessary + resize_buf(&buf, buf_size, buf_i); + + // Expand variable + if (buf[buf_i] == '$') + { + // Temporary variables + char *expanded_var; + char *tmp_res_buf; + struct line false_line = { + .buffer = buf, .file_stream = NULL, .length = 0, .number = 0 + }; + str_i += expand_variable(&false_line, str_i + 1, &expanded_var); + buf_size = append_str(buf, expanded_var, buf_i, &tmp_res_buf); + // Replace buf with buf + expanded_variable + buf_i = strlen(tmp_res_buf); + free(buf); + // free(expanded_var); + buf = tmp_res_buf; + continue; + } + + buf[buf_i] = str[str_i]; + buf_i++; + str_i++; + } + + buf[buf_i] = '\0'; + + return buf; +} diff --git a/minimake/src/lines/lines.h b/minimake/src/lines/lines.h index 081d305..5782327 100644 --- a/minimake/src/lines/lines.h +++ b/minimake/src/lines/lines.h @@ -4,25 +4,25 @@ #define STRING_BUFFER_SIZE 32 #include -#include #include +#include // Holds line information // Exists only because of EPITA's annoying 4 parameters limit // WARNING buffer must be freed after use struct line { - char* buffer; // Line content - ssize_t length; // Line length - size_t number; // Line number in file - FILE* file_stream; // Full file stream + char *buffer; // Line content + ssize_t length; // Line length + size_t number; // Line number in file + FILE *file_stream; // Full file stream }; int ischar(char c); int isblankline(struct line *l); int skipblanks(char *buf, size_t buf_len); size_t readword(char *buf, size_t buf_len, char **word); -size_t resize_buf(char** buf, size_t buf_size, size_t index); +size_t resize_buf(char **buf, size_t buf_size, size_t index); char *insert_str(char *base, char *str, size_t index); size_t read_declaration(struct line *line, size_t index, char **word); size_t append_str(char *base, char *str, size_t index, char **res); diff --git a/minimake/src/lists/.gitignore b/minimake/src/lists/.gitignore deleted file mode 100644 index 3309b20..0000000 --- a/minimake/src/lists/.gitignore +++ /dev/null @@ -1 +0,0 @@ -list.c diff --git a/minimake/src/lists/lists.h b/minimake/src/lists/lists.h index 8c4114f..116bd1f 100644 --- a/minimake/src/lists/lists.h +++ b/minimake/src/lists/lists.h @@ -1,11 +1,11 @@ -#ifndef LIST_H -#define LIST_H +#ifndef LISTS_H +#define LISTS_H #include struct list { - void* data; + void *data; struct list *next; }; @@ -13,7 +13,7 @@ struct list ** Insert a node containing `value` at the beginning of the list. ** Return `NULL` if an error occured. */ -struct list *list_prepend(struct list *list, void* value); +struct list *list_prepend(struct list *list, void *value); /* ** Return the lenght of the list. @@ -44,7 +44,7 @@ void list_deep_destroy(struct list *l); ** Return `NULL` if an error occured. */ // START PROTO list_append -struct list *list_append(struct list *list, void* value); +struct list *list_append(struct list *list, void *value); // END PROTO list_append /* @@ -54,7 +54,7 @@ struct list *list_append(struct list *list, void* value); ** Return `NULL` if an error occured. */ // START PROTO list_insert -struct list *list_insert(struct list *list, void* value, size_t index); +struct list *list_insert(struct list *list, void *value, size_t index); // END PROTO list_insert /* @@ -70,7 +70,7 @@ struct list *list_remove(struct list *list, size_t index); ** Return `-1` if nothing is found. */ // START PROTO list_find -int list_find(struct list *list, void* value); +int list_find(struct list *list, void *value); // END PROTO list_find /* @@ -107,4 +107,4 @@ int list_find(struct list *list, void* value); // struct list *list_split(struct list *list, size_t index); // END PROTO list_split -#endif /* ! LIST_H */ +#endif /* ! LISTS_H */ diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index 675702c..c28aed3 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -466,12 +466,11 @@ static int run_rule(struct rule *rule) struct list *commands = rule->recipe; struct list *dependencies = rule->dependencies; - // Expand dependencies variables - // TODO - // Build dependencies while (dependencies != NULL) { + // Expand variables + // Check file existence if (!file_exists(dependencies->data)) { diff --git a/minimake/src/minimake.h b/minimake/src/minimake.h index f6ed073..7bb5f39 100644 --- a/minimake/src/minimake.h +++ b/minimake/src/minimake.h @@ -18,8 +18,8 @@ #include #include -#include "lists/lists.h" #include "lines/lines.h" +#include "lists/lists.h" // Holds variable information // WARNING its values must be freed after use @@ -33,12 +33,12 @@ struct variable // WARNING its values must be freed after use struct rule { - char* name; + char *name; struct list *dependencies; struct list *recipe; }; -int make(char *path, struct list* rules, char *argv0, int flags); +int make(char *path, struct list *rules, char *argv0, int flags); void make_parse(char *path); int make_run(struct list *rules); void drop(int status, char *format, ...); From 4b3df88e8a3268c2bb20329639d1031363952f86 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 31 Oct 2025 22:48:30 +0100 Subject: [PATCH 2/8] fixed print --- minimake/src/minimake.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index c28aed3..468ce23 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -488,6 +488,8 @@ static int run_rule(struct rule *rule) dependencies->data); } } + + dependencies = dependencies->next; } while (commands != NULL) @@ -550,9 +552,15 @@ int make(char *path, struct list *rules, char *exec_name, int flags) make_parse(path); + // Print if (flags & FLAGS_PRINT) + { dump_database(); + free_all(); + return 0; + } + // Run int status = make_run(rules); free_all(); return status; @@ -590,7 +598,7 @@ void dump_database(void) // Print char *key = elt->data; - printf("%s = %s\n", key, val); + printf("'%s' = '%s'\n", key, val); elt = elt->next; } @@ -605,7 +613,7 @@ void dump_database(void) drop(GENERIC_ERR, "Could not get rule '%s' in database", elt->data); // Print name - printf("(%s) :", rule->name); + printf("(%s):", rule->name); // Print dependencies struct list *dep = rule->dependencies; From db4bf470ffa31d61bca5f8986a69d277143aea74 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 31 Oct 2025 23:12:01 +0100 Subject: [PATCH 3/8] even more fixes --- minimake/Makefile | 8 ++++---- minimake/src/files/files.c | 12 ++++-------- minimake/tests/Makefile.test4 | 4 +++- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/minimake/Makefile b/minimake/Makefile index cb0ae0a..db29234 100644 --- a/minimake/Makefile +++ b/minimake/Makefile @@ -21,10 +21,10 @@ $(TARGET): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) @echo $(OBJS) -# debug: CFLAGS += $(DBG_CFLAGS) -# debug: LDFLAGS += $(DBG_LDFLAGS) -# debug: $(OBJS) -# $(CC) -o $(TARGET) $^ $(LDFLAGS) $(LDLIBS) +debug: CFLAGS += $(DBG_CFLAGS) +debug: LDFLAGS += $(DBG_LDFLAGS) +debug: $(OBJS) + $(CC) -o $(TARGET) $^ $(LDFLAGS) $(LDLIBS) check: dash ./tests/run.sh diff --git a/minimake/src/files/files.c b/minimake/src/files/files.c index 2d46ecb..ef00e46 100644 --- a/minimake/src/files/files.c +++ b/minimake/src/files/files.c @@ -60,9 +60,6 @@ int run_command(char *command) fflush(stdout); fflush(stderr); - // char *executable; - // size_t args_offset = readword(command, strlen(command), &executable); - int id = fork(); if (id < 0) { @@ -72,14 +69,13 @@ int run_command(char *command) if (id == 0) { - int res = 0; - wait(&res); - // printf("Got return code: %d\n", res); - return res; + int res = execl("/bin/sh", "(make)", "-c", command, NULL); + exit(res); } else { - int res = execl("/bin/sh", "(make)", "-c", command, NULL); + int res = 0; + wait(&res); return res; } } diff --git a/minimake/tests/Makefile.test4 b/minimake/tests/Makefile.test4 index 45ee423..4da97dd 100644 --- a/minimake/tests/Makefile.test4 +++ b/minimake/tests/Makefile.test4 @@ -1,5 +1,7 @@ rule1: echo Toto + echo Tata + echo Tutu rule2: - @echo Toto + @echo Toto encore From 7acbfd6c9fb554746a847184713666bdcc4b21ce Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 31 Oct 2025 23:14:34 +0100 Subject: [PATCH 4/8] hmmmm --- minimake/src/files/files.c | 1 - 1 file changed, 1 deletion(-) diff --git a/minimake/src/files/files.c b/minimake/src/files/files.c index ef00e46..b27627d 100644 --- a/minimake/src/files/files.c +++ b/minimake/src/files/files.c @@ -2,7 +2,6 @@ #include #include -#include #include #include #include From bb1591a96ae4ff91b2cd4e87458e57791189b8fc Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Thu, 18 Dec 2025 13:17:48 +0100 Subject: [PATCH 5/8] nothing to be done reload --- minimake/src/minimake.c | 10 +++++++++- minimake/tests/Makefile.empty | 1 + minimake/tests/Makefile.vars | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 minimake/tests/Makefile.empty create mode 100644 minimake/tests/Makefile.vars diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index 468ce23..e76e664 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -469,7 +469,8 @@ static int run_rule(struct rule *rule) // Build dependencies while (dependencies != NULL) { - // Expand variables + // Expand variable + // TODO // Check file existence if (!file_exists(dependencies->data)) @@ -492,6 +493,13 @@ static int run_rule(struct rule *rule) dependencies = dependencies->next; } + // Empty recipe + if (commands == NULL) + { + printf("%s: Nothing to be done for '%s'.\n", program_name, rule->name); + return 0; + } + while (commands != NULL) { // Expand command variables diff --git a/minimake/tests/Makefile.empty b/minimake/tests/Makefile.empty new file mode 100644 index 0000000..e9228f2 --- /dev/null +++ b/minimake/tests/Makefile.empty @@ -0,0 +1 @@ +empty_target: diff --git a/minimake/tests/Makefile.vars b/minimake/tests/Makefile.vars new file mode 100644 index 0000000..b5ce417 --- /dev/null +++ b/minimake/tests/Makefile.vars @@ -0,0 +1,4 @@ +V=2 + +main: + echo $V From 57c7743ba07eb45a566497789604b3502f9663ae Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 19 Dec 2025 20:12:03 +0100 Subject: [PATCH 6/8] si ca passe pas jsui cuit --- minimake/src/minimake.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index e76e664..ff913ab 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "files/files.h" @@ -337,6 +338,7 @@ size_t expand_variable(struct line *line, size_t index, char **value) // Get corresponding value *value = get_variable_value(var_name, line->number); + free(var_name); } return 2; @@ -460,9 +462,34 @@ void make_parse(char *path) // ==== Runtime ==== +// Return 1 if rule is up to date, 0 otherwise +static int uptodate(struct rule *rule) +{ + struct stat path_stat; + + if (lstat(rule->name, &path_stat) != 0) // target doesn't exists + return 0; + + struct list *dependencies = rule->dependencies; + while (dependencies != NULL) + { + char *depname = dependencies->data; + if (lstat(depname, &path_stat) != 0) // Dependecy doesn't exists + return 0; + } + return 1; +} + // Expands and run a specified rule static int run_rule(struct rule *rule) { + // Check if p to date + if (uptodate(rule)) + { + printf("%s: '%s' is up to date.", program_name, rule->name); + return 0; + } + struct list *commands = rule->recipe; struct list *dependencies = rule->dependencies; From 018bae577a9ba0abafe5d8176e55ed4fc1f523a9 Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 19 Dec 2025 20:13:58 +0100 Subject: [PATCH 7/8] et on dis ciao aux clang format --- minimake/src/minimake.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/minimake/src/minimake.c b/minimake/src/minimake.c index ff913ab..4368296 100644 --- a/minimake/src/minimake.c +++ b/minimake/src/minimake.c @@ -18,14 +18,14 @@ // Static variables -char *program_name; +static char *program_name; -struct hash_map *variables = NULL; -struct hash_map *rules = NULL; +static struct hash_map *variables = NULL; +static struct hash_map *rules = NULL; // Keeps track of variables and rules order -struct list *variables_list = NULL; -struct list *rules_list = NULL; +static struct list *variables_list = NULL; +static struct list *rules_list = NULL; // ==== Misc ==== From 9731ba9a7a6edb6adf287558157414924d6b63ef Mon Sep 17 00:00:00 2001 From: "Gu://em_" Date: Fri, 19 Jun 2026 11:11:29 +0200 Subject: [PATCH 8/8] New presentation and organization --- minimake/Makefile => Makefile | 0 README.md | 73 +++++++++++ micromake/src/Microfile | 3 - micromake/src/micromake.c | 119 ------------------ microshell/microshell.c | 30 ----- simple_ls/simple_ls.c | 37 ------ {minimake/src => src}/files/files.c | 0 {minimake/src => src}/files/files.h | 0 {minimake/src => src}/hash_maps/hash_maps.c | 0 {minimake/src => src}/hash_maps/hash_maps.h | 0 {minimake/src => src}/lines/lines.c | 0 {minimake/src => src}/lines/lines.h | 0 {minimake/src => src}/lists/lists.c | 0 {minimake/src => src}/lists/lists.h | 0 {minimake/src => src}/main.c | 0 {minimake/src => src}/minimake.c | 0 {minimake/src => src}/minimake.h | 0 {minimake/tests => tests}/Makefile.empty | 0 .../tests => tests}/Makefile.syntax-test | 0 {minimake/tests => tests}/Makefile.test3 | 0 {minimake/tests => tests}/Makefile.test4 | 0 {minimake/tests => tests}/Makefile.vars | 0 .../tests => tests}/Makefile2.syntax-test | 0 {minimake/tests => tests}/run.sh | 0 24 files changed, 73 insertions(+), 189 deletions(-) rename minimake/Makefile => Makefile (100%) create mode 100644 README.md delete mode 100644 micromake/src/Microfile delete mode 100644 micromake/src/micromake.c delete mode 100644 microshell/microshell.c delete mode 100644 simple_ls/simple_ls.c rename {minimake/src => src}/files/files.c (100%) rename {minimake/src => src}/files/files.h (100%) rename {minimake/src => src}/hash_maps/hash_maps.c (100%) rename {minimake/src => src}/hash_maps/hash_maps.h (100%) rename {minimake/src => src}/lines/lines.c (100%) rename {minimake/src => src}/lines/lines.h (100%) rename {minimake/src => src}/lists/lists.c (100%) rename {minimake/src => src}/lists/lists.h (100%) rename {minimake/src => src}/main.c (100%) rename {minimake/src => src}/minimake.c (100%) rename {minimake/src => src}/minimake.h (100%) rename {minimake/tests => tests}/Makefile.empty (100%) rename {minimake/tests => tests}/Makefile.syntax-test (100%) rename {minimake/tests => tests}/Makefile.test3 (100%) rename {minimake/tests => tests}/Makefile.test4 (100%) rename {minimake/tests => tests}/Makefile.vars (100%) rename {minimake/tests => tests}/Makefile2.syntax-test (100%) rename {minimake/tests => tests}/run.sh (100%) diff --git a/minimake/Makefile b/Makefile similarity index 100% rename from minimake/Makefile rename to Makefile diff --git a/README.md b/README.md new file mode 100644 index 0000000..7cc185b --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# Minimake + +Minimake is a small project written in about a week in C99. Its goal was to reproduce the main features of the well known GNU Make utility. + +> **Note** This is a school project, therefore it probably won't interest you if you are looking for something useful. + +## Build + +```sh +make +``` +or even better +```sh +minimake +``` + +## How it works + +If you're not familiar with Make, what it does is that it reads a file named +`Makefile` in the current directory which contains instructions to build a +project in the form of recipes. It includes support for variables, dependencies +, implicit rules and more. + +Then depending on the user input it automatically executes a recipe with its dependencies. + + +Here is what a basic one can look like +```make +BENCH_FLAGS = --all + +test_and_bench: + bash ./runtests.sh + bash ./runbenchs.sh $(BENCH_FLAGS) +``` + +But it will more realisticly look like that + +```make +CC = gcc +CFLAGS = -std=c99 -pedantic -Werror -Wall -Wextra -Wvla +LDFLAGS= + +DBG_CFLAGS = -fsanitize=address -g +DBG_LDFLAGS= -fsanitize=address + + +SRC_DIR = src +LIB_SRCS = lines/lines.c hash_maps/hash_maps.c lists/lists.c files/files.c +MAIN_SRCS = main.c minimake.c + +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: LDFLAGS += $(DBG_LDFLAGS) +debug: $(OBJS) + $(CC) -o $(DBG_TARGET) $^ $(LDFLAGS) $(LDLIBS) + +check: + dash ./tests/run.sh + +clean: + $(RM) $(TARGET) + $(RM) $(OBJS) + +``` diff --git a/micromake/src/Microfile b/micromake/src/Microfile deleted file mode 100644 index 607b02a..0000000 --- a/micromake/src/Microfile +++ /dev/null @@ -1,3 +0,0 @@ -qwertyu: -cbejw: a bc d -dmwq :d wdwd diff --git a/micromake/src/micromake.c b/micromake/src/micromake.c deleted file mode 100644 index fda3fe2..0000000 --- a/micromake/src/micromake.c +++ /dev/null @@ -1,119 +0,0 @@ -#define _POSIX_C_SOURCE 200809L -#define BUFFER_SIZE 1024 -#define STRING_BUFFER_SIZE 32 - -#include -#include -#include -#include - -// Helps to match a string (excludes blanks and special characters) -static int is_char(char c) -{ - return c != '\0' && !isblank(c) && c != ':' && c != '=' && c != '#'; -} - -// Returns the next word from buf until buf_len, -// and the numbers of read characters in *read_chars -// WARNING allocates the result on the heap -static char *readWord(char *buf, size_t buf_len, size_t *read_chars) -{ - size_t i = 0; - size_t str_buf_size = STRING_BUFFER_SIZE; - char *str_buf = malloc(sizeof(char) * str_buf_size); - while (i < buf_len && is_char(buf[i])) - { - // Reallocate more space if necessary - if (i >= str_buf_size - 1) - { - str_buf_size += STRING_BUFFER_SIZE; - str_buf = realloc(str_buf, str_buf_size); - if (str_buf == NULL) - errx(2, "Could not realloc"); - } - - str_buf[i] = buf[i]; - i++; - } - - str_buf[i] = '\0'; - *read_chars = i; - - return str_buf; -} - -int skip_blanks(char *buf, size_t buf_len) -{ - size_t i = 0; - while (i < buf_len && isblank(buf[i])) - i++; - return i; -} - -int main(int argc, char **argv) -{ - if (argc < 2) - errx(2, "Not enough arguments"); - if (argc > 2) - errx(2, "Not enough arguments"); - - // Open file - FILE *stream = fopen(argv[1], "r"); - if (stream == 0) - errx(2, "Could not open file"); - - // Allocate buffer - size_t buf_size = BUFFER_SIZE; - char *buf = malloc(sizeof(char) * buf_size); - if (buf == NULL) - errx(2, "Could not allocate more memory"); - - // Read - ssize_t nread; - while ((nread = getline(&buf, &buf_size, stream)) != -1) - { - size_t u_nread = nread; - size_t i = 0; - // Skip blanks - i += skip_blanks(buf + i, nread - i); - - // Read target name - size_t skipped_chars = 0; - char *rule_name = readWord(buf + i, nread - i, &skipped_chars); - if (skipped_chars != 0) - printf("%s:", rule_name); - i += skipped_chars; - - // Skip until ':' - i += skip_blanks(buf + i, nread - i); - if (buf[i] != ':') - errx(2, "Unexpected character '%c' after rule declaration '%s'", - buf[i], rule_name); - i++; - - // Read deps - while (i < u_nread) - { - // Skip blanks - i += skip_blanks(buf + i, nread - i); - - // Read word - size_t skipped_chars = 0; - char *dep_name = readWord(buf + i, nread - i, &skipped_chars); - if (skipped_chars != 0) - printf(" %s", dep_name); - free(dep_name); - i += skipped_chars; - - if (!is_char(buf[i]) && !isblank(buf[i]) && buf[i] != '\0') - errx(2, "Unexpected character '%c'", buf[i]); - } - - i++; - free(rule_name); - } - - free(buf); - fclose(stream); - return 0; -} diff --git a/microshell/microshell.c b/microshell/microshell.c deleted file mode 100644 index 4a7b661..0000000 --- a/microshell/microshell.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - if (argc < 2) - err(1, "Not enough args"); - - int id = fork(); - if (id < 0) - err(1, "Cannot fork"); - - if (id == 0) - { - int res = 0; - wait(&res); - // printf("%d\n", res); - return res; - } - else - { - int res = execl("/bin/sh", "supershell", "-c", argv[1], NULL); - printf("process exit status: %d\n", res); - // exit(res); - return res; - } -} diff --git a/simple_ls/simple_ls.c b/simple_ls/simple_ls.c deleted file mode 100644 index 508c5df..0000000 --- a/simple_ls/simple_ls.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include - -static void simple_ls(char *path) -{ - if (path == NULL) - errx(1, "Internal error: Passed NULL path"); - - DIR *dir = opendir(path); - if (dir == NULL) - errx(1, "Internal error: cannot open directory"); - - struct dirent *element; - while ((element = readdir(dir))) - { - puts(element->d_name); - } - - int res = closedir(dir); - if (res == -1) - errx(1, "Could not close dir"); -} - -int main(int argc, char **argv) -{ - if (argc < 2) - simple_ls("."); - else - { - for (int i = 1; i < argc; i++) - { - simple_ls(argv[i]); - } - } - return 0; -} diff --git a/minimake/src/files/files.c b/src/files/files.c similarity index 100% rename from minimake/src/files/files.c rename to src/files/files.c diff --git a/minimake/src/files/files.h b/src/files/files.h similarity index 100% rename from minimake/src/files/files.h rename to src/files/files.h diff --git a/minimake/src/hash_maps/hash_maps.c b/src/hash_maps/hash_maps.c similarity index 100% rename from minimake/src/hash_maps/hash_maps.c rename to src/hash_maps/hash_maps.c diff --git a/minimake/src/hash_maps/hash_maps.h b/src/hash_maps/hash_maps.h similarity index 100% rename from minimake/src/hash_maps/hash_maps.h rename to src/hash_maps/hash_maps.h diff --git a/minimake/src/lines/lines.c b/src/lines/lines.c similarity index 100% rename from minimake/src/lines/lines.c rename to src/lines/lines.c diff --git a/minimake/src/lines/lines.h b/src/lines/lines.h similarity index 100% rename from minimake/src/lines/lines.h rename to src/lines/lines.h diff --git a/minimake/src/lists/lists.c b/src/lists/lists.c similarity index 100% rename from minimake/src/lists/lists.c rename to src/lists/lists.c diff --git a/minimake/src/lists/lists.h b/src/lists/lists.h similarity index 100% rename from minimake/src/lists/lists.h rename to src/lists/lists.h diff --git a/minimake/src/main.c b/src/main.c similarity index 100% rename from minimake/src/main.c rename to src/main.c diff --git a/minimake/src/minimake.c b/src/minimake.c similarity index 100% rename from minimake/src/minimake.c rename to src/minimake.c diff --git a/minimake/src/minimake.h b/src/minimake.h similarity index 100% rename from minimake/src/minimake.h rename to src/minimake.h diff --git a/minimake/tests/Makefile.empty b/tests/Makefile.empty similarity index 100% rename from minimake/tests/Makefile.empty rename to tests/Makefile.empty diff --git a/minimake/tests/Makefile.syntax-test b/tests/Makefile.syntax-test similarity index 100% rename from minimake/tests/Makefile.syntax-test rename to tests/Makefile.syntax-test diff --git a/minimake/tests/Makefile.test3 b/tests/Makefile.test3 similarity index 100% rename from minimake/tests/Makefile.test3 rename to tests/Makefile.test3 diff --git a/minimake/tests/Makefile.test4 b/tests/Makefile.test4 similarity index 100% rename from minimake/tests/Makefile.test4 rename to tests/Makefile.test4 diff --git a/minimake/tests/Makefile.vars b/tests/Makefile.vars similarity index 100% rename from minimake/tests/Makefile.vars rename to tests/Makefile.vars diff --git a/minimake/tests/Makefile2.syntax-test b/tests/Makefile2.syntax-test similarity index 100% rename from minimake/tests/Makefile2.syntax-test rename to tests/Makefile2.syntax-test diff --git a/minimake/tests/run.sh b/tests/run.sh similarity index 100% rename from minimake/tests/run.sh rename to tests/run.sh