From 4c221182c3fa3bacf4e59821ebda0afeb7eb0e1e Mon Sep 17 00:00:00 2001 From: tekClovis Date: Thu, 17 Apr 2025 22:29:07 +0200 Subject: [PATCH] [FIX] segv cause im a noob --- src/ast/get_usr_loop_cmd.c | 6 ++++-- src/ast/loop.c | 10 +++++----- src/ast/tokeniser.c | 2 +- src/shell.c | 1 - 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ast/get_usr_loop_cmd.c b/src/ast/get_usr_loop_cmd.c index 940810c..b636ed6 100644 --- a/src/ast/get_usr_loop_cmd.c +++ b/src/ast/get_usr_loop_cmd.c @@ -43,7 +43,8 @@ ast_t *get_first_cmd(ast_t *node, char prompt[], size_t *bf_len) { size_t buffer_len = 0; - printf("%s? ", prompt); + if (isatty(STDIN_FILENO)) + printf("%s? ", prompt); node->loop.buffers[node->loop.sz] = NULL; getline(&(node->loop.buffers[node->loop.sz]), bf_len, stdin); if (!feof(stdin)){ @@ -102,7 +103,8 @@ ast_t *get_usr_loop_cmd(ast_t *node) node = get_first_cmd(node, prompt, &buffer_sz); while (!feof(stdin) && strcmp("end", node->loop.buffers[node->loop.sz - 1])){ - printf("%s? ", prompt); + if (isatty(STDIN_FILENO)) + printf("%s? ", prompt); if (node->loop.sz >= node->loop.cap) node = buffers_realloc(node); if (node == NULL) diff --git a/src/ast/loop.c b/src/ast/loop.c index 9e49a1d..af6d23a 100644 --- a/src/ast/loop.c +++ b/src/ast/loop.c @@ -54,12 +54,11 @@ int while_loop(ef_t *ef, ast_t *node, char **save_buffers) ef->env->in_loop = true; for (size_t i = 0; node->loop.buffers[i]; i++){ status = visitor(node->loop.buffers[i], ef->env, ef->history); - free_array(node->loop.buffers); - node->loop.buffers = arraydup(save_buffers); if (node->loop.buffers == NULL) exit(84); } free_array(node->loop.buffers); + node->loop.buffers = arraydup(save_buffers); ef->env->in_loop = false; return status; } @@ -70,14 +69,14 @@ int foreach_loop(ef_t *ef, ast_t *node, char **save_buffers) int status = 0; ef->env->in_loop = true; - for (size_t i = 0; node->loop.buffers[i] && ef->flags; i++){ + for (size_t i = 0; node->loop.buffers[i]; i++){ status = visitor(node->loop.buffers[i], ef->env, ef->history); - free_array(node->loop.buffers); - node->loop.buffers = arraydup(save_buffers); if (node->loop.buffers == NULL) exit(84); } free_array(node->loop.buffers); + node->loop.buffers = arraydup(save_buffers); + printf("%s\n", node->loop.buffers[0]); ef->env->in_loop = false; return status; } @@ -102,6 +101,7 @@ void launch_loop(ef_t *ef, ast_t *node) while (true) status = loop_func(ef, node, save_array); free_array(save_array); + free_array(node->loop.buffers); exit(status); } diff --git a/src/ast/tokeniser.c b/src/ast/tokeniser.c index 42c67c4..1b0aae3 100644 --- a/src/ast/tokeniser.c +++ b/src/ast/tokeniser.c @@ -29,7 +29,7 @@ const tokens_list_t TOKENS_LIST[] = { { T_HEREDOC, "<<", 2, "T_HEREDOC" }, { T_IN_REDIRECT, "<", 1, "T_IN_REDIRECT" }, { T_WHILE, "while", 5, "T_WHILE"}, - { T_FOREACH, "foreach", 7, "T_WHILE"}, + { T_FOREACH, "foreach", 7, "T_FOREACH"}, { T_EOF, "\0", 1, "T_EOF" } }; diff --git a/src/shell.c b/src/shell.c index 1cd73b4..411b628 100644 --- a/src/shell.c +++ b/src/shell.c @@ -53,7 +53,6 @@ int shell_loop(env_t *env, int is_a_tty, history_t *history) size_t buffer_len; while (true) { - printf("caca\n"); if (is_a_tty) WRITE_CONST(STDOUT_FILENO, SHELL_PROMPT); if (getline(&buffer, &buffer_sz, stdin) == -1)