summaryrefslogtreecommitdiffstats
path: root/src/ft_e_lcom.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-04-23 15:32:57 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-04-23 15:32:57 +0200
commit70c7830ba36896408611083fc57fb3265b53357c (patch)
tree8c830f593b28ce2b948b9bbfb0ccb55ab37964cb /src/ft_e_lcom.c
parentOk it's fine (diff)
download42-minishell-70c7830ba36896408611083fc57fb3265b53357c.tar.gz
42-minishell-70c7830ba36896408611083fc57fb3265b53357c.tar.bz2
42-minishell-70c7830ba36896408611083fc57fb3265b53357c.tar.xz
42-minishell-70c7830ba36896408611083fc57fb3265b53357c.tar.zst
42-minishell-70c7830ba36896408611083fc57fb3265b53357c.zip
Fine builtins execution, now norme
Diffstat (limited to 'src/ft_e_lcom.c')
-rw-r--r--src/ft_e_lcom.c76
1 files changed, 2 insertions, 74 deletions
diff --git a/src/ft_e_lcom.c b/src/ft_e_lcom.c
index 51c183a..b535813 100644
--- a/src/ft_e_lcom.c
+++ b/src/ft_e_lcom.c
@@ -11,15 +11,7 @@
/* ************************************************************************** */
#include <libft.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <signal.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include "ft_s_destroy.h"
-#include "ft_s_lcom.h"
+#include "ft_e_builtin.h"
#include "ft_s_struct.h"
static uint8_t
@@ -42,11 +34,7 @@ uint8_t
{
/* TODO: norme */
t_lcom *ptr;
- int32_t fd;
- int32_t status;
- int32_t ret;
uint8_t bu_id;
- pid_t pid;
ptr = msh->curr;
while (ptr != NULL)
@@ -54,67 +42,7 @@ uint8_t
if ((bu_id = ft_get_builtin_id(ptr->com, msh))
< FT_BUILTINS_COUNT)
{
- /* TODO: handle exit | bu_id = 6 */
- if ((pid = fork()) == 0)
- {
- if (ptr->redir == -1)
- {
- if (ptr->redir == -1 && (fd = open(ptr->rdrpath, O_RDONLY)) == -1)
- {
- if (errno == ENOENT)
- ft_dprintf(STDERR_FILENO,
- "minishell: %s: No such file or directory\n", ptr->rdrpath);
- else if (errno == EACCES)
- ft_dprintf(STDERR_FILENO,
- "minishell: %s: Permission denied\n", ptr->rdrpath);
- }
- }
- else if (ptr->redir == 1)
- {
- if ((fd = open(ptr->rdrpath,
- O_CREAT | O_TRUNC | O_WRONLY, 0644)) == -1)
- {
- /* TODO: handle err with errno */
- if (errno == EACCES)
- ft_dprintf(STDERR_FILENO,
- "minishell: %s: Permission denied\n",
- ptr->rdrpath);
- }
- dup2(fd, STDOUT_FILENO);
- close(fd);
- }
- else if (ptr->redir == 2)
- {
- if ((fd = open(ptr->rdrpath,
- O_CREAT | O_APPEND | O_WRONLY, 0644)) == -1)
- {
- /* TODO: handle err with errno */
- if (errno == EACCES)
- ft_dprintf(STDERR_FILENO,
- "minishell: %s: Permission denied\n",
- ptr->rdrpath);
- }
- dup2(fd, STDOUT_FILENO);
- close(fd);
- }
- msh->ret = msh->bu_ptr[bu_id](ptr->args, msh);
- ret = msh->ret;
- ft_lcom_clear(&msh->curr);
- ft_s_destroy(msh);
- exit(ret);
- }
- else if (pid < 0)
- {
- /* TODO: handle fork failed */
- }
- else
- {
- while (wait(&status) != pid)
- {
- /* TODO: fix this unnormed syntax */
- }
- msh->ret = status;
- }
+ ft_e_builtin(ptr, bu_id, msh);
}
else
{