From 56ccad6b85a5f3f17eebaf4ba511e07ba760b050 Mon Sep 17 00:00:00 2001
From: JozanLeClerc <bousset.rudy@gmail.com>
Date: Sat, 15 Aug 2020 18:00:23 +0200
Subject: Can read scripts, but need to handle fails

---
 src/b_exit.c      |  1 -
 src/m_argv.c      | 21 +++++++++++++++------
 src/m_loop.c      |  7 ++++---
 src/m_loop.h      |  2 +-
 src/m_minishell.c |  4 +---
 src/p_line.c      | 21 +++++++++++++++++++++
 6 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/src/b_exit.c b/src/b_exit.c
index 19e55d9..cb8988f 100644
--- a/src/b_exit.c
+++ b/src/b_exit.c
@@ -40,6 +40,5 @@ uint8_t
 	}
 	else
 		ret = msh->ret;
-	ft_dprintf(STDERR_FILENO, "exit\n");
 	return (ret);
 }
diff --git a/src/m_argv.c b/src/m_argv.c
index 6a79bd7..1e23bae 100644
--- a/src/m_argv.c
+++ b/src/m_argv.c
@@ -12,6 +12,8 @@
 
 #include <libft.h>
 #include <stdint.h>
+#include <fcntl.h>
+#include <unistd.h>
 
 #include "d_define.h"
 #include "m_comm.h"
@@ -20,16 +22,16 @@
 
 uint8_t
 	m_argv(int argc,
-			char *const argv[],
-			t_msh *msh)
+		char *const argv[],
+		t_msh *msh)
 {
-	/* TODO: better argv handling */
+	int32_t	fd;
+
 	if (argc == 1)
 	{
-		msh->ret = m_loop(msh);
-		return (msh->ret);
+		msh->ret = m_loop(STDIN_FILENO, msh);
 	}
-	if (!ft_strncmp(*(argv + 1), FT_OPT_COMMAND, 3))
+	else if (argc > 1 && ft_strncmp(*(argv + 1), FT_OPT_COMMAND, 3) == 0)
 	{
 		if (*(argv + 2) == NULL)
 		{
@@ -39,5 +41,12 @@ uint8_t
 		}
 		msh->ret = m_comm(*(argv + 2), msh);
 	}
+	else
+	{
+		if ((fd = open(*(argv + 1), O_RDONLY)) < 0)
+			f_open_file(msh);
+		msh->ret = m_loop(fd, msh);
+		close(fd);
+	}
 	return (msh->ret);
 }
diff --git a/src/m_loop.c b/src/m_loop.c
index 140d009..84efddf 100644
--- a/src/m_loop.c
+++ b/src/m_loop.c
@@ -82,7 +82,7 @@ void
 }
 
 uint8_t
-	m_loop(t_msh *msh)
+	m_loop(int32_t fd, t_msh *msh)
 {
 	char	*line;
 	char	*quote;
@@ -91,8 +91,9 @@ uint8_t
 	gnl = 1;
 	while (gnl > 0)
 	{
-		m_prompt(msh);
-		gnl = get_next_line(STDIN_FILENO, &line);
+		if (fd == STDIN_FILENO)
+			m_prompt(msh);
+		gnl = get_next_line(fd, &line);
 		if (line[0] != '\0')
 		{
             if (!(quote = ft_strchr(line, '\'')) && !(quote = ft_strchr(line, '\"')))
diff --git a/src/m_loop.h b/src/m_loop.h
index 1d665e3..3f95a5e 100644
--- a/src/m_loop.h
+++ b/src/m_loop.h
@@ -17,6 +17,6 @@
 
 #include "s_struct.h"
 
-uint8_t	m_loop(t_msh *msh);
+uint8_t	m_loop(int32_t fd, t_msh *msh);
 
 #endif
diff --git a/src/m_minishell.c b/src/m_minishell.c
index e88207b..a538041 100644
--- a/src/m_minishell.c
+++ b/src/m_minishell.c
@@ -30,13 +30,11 @@ int
 	int32_t	ret;
 	t_msh	*msh;
 
-	/* TODO: handle general variables | $var */
-	if (!(msh = init_msh(argv, envp)))
+	if ((msh = init_msh(argv, envp)) == NULL)
 	{
 		ft_dprintf(2, "%s\n", strerror(errno));
 		return (FT_RET_ALLOC);
 	}
-	/* TODO: delet this */
 	ret = m_argv(argc, argv, msh);
 	s_destroy(msh);
 	return (ret);
diff --git a/src/p_line.c b/src/p_line.c
index af1ba64..8b13424 100644
--- a/src/p_line.c
+++ b/src/p_line.c
@@ -37,11 +37,32 @@ static void
 	}
 }
 
+static t_bool
+	p_check_whitespaces_only(char line[])
+{
+	char	*ptr;
+
+	ptr = line;
+	while (*ptr != '\0')
+	{
+		if (*ptr != ' ' && *ptr != '\t')
+		{
+			return (FALSE);
+		}
+		ptr++;
+	}
+	return (TRUE);
+}
+
 void
 	p_line(char line[],
 		t_msh *msh)
 {
 	p_delete_comments(line);
+	if (p_check_whitespaces_only(line) == TRUE)
+	{
+		return ;
+	}
 	if (p_lcom(line, msh) < 0)
 	{
 		f_alloc_and_destroy_msh(msh);
-- 
cgit v1.2.3