aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Kaiser2024-09-17 19:25:13 +0200
committerDominik Kaiser2024-09-17 19:25:13 +0200
commit1fec66236f1811a3eeac673d0002fe8d9d3d8835 (patch)
tree8e007570a2109a3cb756c2d699ff4f6a20b75317
parente8891daeb2e9cf26dc6be1f4d3693734d7a9c5c1 (diff)
downloadminishell-1fec66236f1811a3eeac673d0002fe8d9d3d8835.tar.gz
minishell-1fec66236f1811a3eeac673d0002fe8d9d3d8835.zip
Fix error message printing
-rw-r--r--src/collect_redirs.c16
-rw-r--r--src/new_node.c4
-rw-r--r--src/parser.c40
3 files changed, 22 insertions, 38 deletions
diff --git a/src/collect_redirs.c b/src/collect_redirs.c
index 79ae95c..60f197b 100644
--- a/src/collect_redirs.c
+++ b/src/collect_redirs.c
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/02 13:49:31 by dkaiser #+# #+# */
-/* Updated: 2024/09/17 17:24:35 by dkaiser ### ########.fr */
+/* Updated: 2024/09/17 19:24:55 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -21,6 +21,7 @@ t_redirection *collect_redirs(t_token **tokens)
{
t_redirection *result;
t_token *cur;
+ int is_redir_only;
cur = *tokens;
result = malloc(sizeof(t_redirection) * 2);
@@ -31,20 +32,21 @@ t_redirection *collect_redirs(t_token **tokens)
while (cur != NULL && cur->next != NULL)
{
if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN)
+ {
+ is_redir_only = 0;
+ if (cur->previous == NULL && cur->next->next == NULL)
+ is_redir_only = 1;
cur = collect_redir(tokens, result, cur);
+ if (is_redir_only)
+ *tokens = NULL;
+ }
else if (cur->type == REDIR_TOKEN)
- {
- printf("Parsing error.\n");
return (free(result), NULL);
- }
else
cur = cur->next;
}
if (cur && cur->type == REDIR_TOKEN)
- {
- printf("Parsing error.\n");
return (free(result), NULL);
- }
return (result);
}
diff --git a/src/new_node.c b/src/new_node.c
index 5c770aa..c58d291 100644
--- a/src/new_node.c
+++ b/src/new_node.c
@@ -6,7 +6,7 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/27 11:21:03 by dkaiser #+# #+# */
-/* Updated: 2024/09/13 16:18:29 by dkaiser ### ########.fr */
+/* Updated: 2024/09/17 18:46:35 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
@@ -27,6 +27,8 @@ t_node *new_pipe_node(t_node *left, t_node *right)
{
t_node *node;
+ if (left == NULL || right == NULL)
+ return (NULL);
node = new_node(PIPE_NODE);
if (node == NULL)
return (NULL);
diff --git a/src/parser.c b/src/parser.c
index 6993a1f..06c1df7 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -6,43 +6,29 @@
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/29 15:53:29 by dkaiser #+# #+# */
-/* Updated: 2024/09/17 15:06:55 by dkaiser ### ########.fr */
+/* Updated: 2024/09/17 19:03:48 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
+#include "libft.h"
#include "minishell.h"
#include "token.h"
static t_token *find_token_by_type(t_token *tokens, int type);
t_token *split_at_first(t_token **tokens, int type);
static t_node *parse_statement(t_token *tokens);
-static void free_node_wrapper(void *node);
t_list *parse(t_token *tokens)
{
- t_list *result;
- t_list *current;
- t_token *current_tokens;
+ t_node *result;
- result = NULL;
- current_tokens = split_at_first(&tokens, NEWLINE_TOKEN);
- while (current_tokens != NULL)
- {
- if (result == NULL)
- {
- current = ft_lstnew(parse_statement(current_tokens));
- result = current;
- }
- else
- {
- current->next = ft_lstnew(parse_statement(current_tokens));
- current = current->next;
- }
- if (current == NULL)
- return (ft_lstclear(&result, free_node_wrapper), NULL);
- current_tokens = split_at_first(&tokens, NEWLINE_TOKEN);
- }
- return (result);
+ if ((*tokens).type == PIPE_TOKEN)
+ result = NULL;
+ else
+ result = parse_statement(tokens);
+ if (result == NULL)
+ printf("Parsing error.\n");
+ return (ft_lstnew(result));
}
static t_node *parse_statement(t_token *tokens)
@@ -53,7 +39,6 @@ static t_node *parse_statement(t_token *tokens)
if (left_side_tokens == NULL)
{
free_tokens(tokens);
- printf("Parsing error.\n");
return (NULL);
}
else if (tokens != NULL)
@@ -97,8 +82,3 @@ static t_token *find_token_by_type(t_token *tokens, int type)
}
return (NULL);
}
-
-static void free_node_wrapper(void *node)
-{
- free_node((t_node *)node);
-}