diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-04-23 16:29:20 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-04-23 16:29:20 +0200 |
commit | 58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3 (patch) | |
tree | d43399d8ac6ce24496b86918496d57c37d628698 /src/ft_e_builtin.c | |
parent | Very good redirs (diff) | |
download | 42-minishell-58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3.tar.gz 42-minishell-58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3.tar.bz2 42-minishell-58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3.tar.xz 42-minishell-58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3.tar.zst 42-minishell-58f7f3e9d2a61d46e57ffe324ae6ae7f21e875a3.zip |
Prepared builtins templates
Diffstat (limited to 'src/ft_e_builtin.c')
-rw-r--r-- | src/ft_e_builtin.c | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/src/ft_e_builtin.c b/src/ft_e_builtin.c deleted file mode 100644 index 4f58f44..0000000 --- a/src/ft_e_builtin.c +++ /dev/null @@ -1,109 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_e_builtin.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ -/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ -/* */ -/* ************************************************************************** */ - -#include <libft.h> -#include <stdlib.h> -#include <stdint.h> -#include <fcntl.h> -#include <unistd.h> -#include <sys/wait.h> -#include <errno.h> -#include "ft_f_file.h" -#include "ft_s_destroy.h" -#include "ft_s_lcom.h" -#include "ft_s_struct.h" - -static void - ft_dup_redirs(const t_lcom *ptr, - t_msh *msh) -{ - int32_t fd; - - if (ptr->redir == -1) - { - if ((fd = open(ptr->rdrpath, O_RDONLY)) == -1) - ft_f_file(ptr->rdrpath, msh); - /* TODO: handle < redir */ - } - if (ptr->redir == 1) - { - if ((fd = open(ptr->rdrpath, - O_CREAT | O_TRUNC | O_WRONLY, 0644)) == -1) - ft_f_file(ptr->rdrpath, msh); - dup2(fd, STDOUT_FILENO); - close(fd); - } - if (ptr->redir == 2) - { - if ((fd = open(ptr->rdrpath, - O_CREAT | O_APPEND | O_WRONLY, 0644)) == -1) - ft_f_file(ptr->rdrpath, msh); - dup2(fd, STDOUT_FILENO); - close(fd); - } -} - -static void - ft_e_builtin_child(const t_lcom *ptr, - uint8_t bu_id, - t_msh *msh) -{ - int32_t ret; - - ft_dup_redirs(ptr, msh); - ret = msh->bu_ptr[bu_id](ptr->args, msh); - ft_lcom_clear(&msh->curr); - ft_s_destroy(msh); - exit(ret); -} - -static void - ft_e_builtin_parent(pid_t pid, - t_msh *msh) -{ - int32_t status; - - while (wait(&status) != pid) - { - /* TODO: fix this unnormed syntax */ - } - msh->ret = WEXITSTATUS(status); -} - -void - ft_e_builtin(const t_lcom *ptr, - uint8_t bu_id, - t_msh *msh) -{ - pid_t pid; - - /* TODO: handle exit | bu_id = 6 */ - if (bu_id != 6) - { - if ((pid = fork()) == 0) - { - ft_e_builtin_child(ptr, bu_id, msh); - } - else if (pid < 0) - { - /* TODO: handle fork failed */ - } - else - { - ft_e_builtin_parent(pid, msh); - } - } - else - { - msh->ret = msh->bu_ptr[bu_id](ptr->args, msh); - } -} |