[FIX] segv cause im a noob

This commit is contained in:
tekClovis
2025-04-17 22:29:07 +02:00
parent 55fcd54ed3
commit 4c221182c3
4 changed files with 10 additions and 9 deletions

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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" }
};

View File

@@ -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)