mirror of
https://github.com/Savapitech/42sh.git
synced 2026-03-18 21:50:35 +01:00
[FIX] segv cause im a noob
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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" }
|
||||
};
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user