From 5710f193d7bae6d378845581352fb312d895ada3 Mon Sep 17 00:00:00 2001 From: Adam Joly Date: Tue, 25 Jun 2024 10:38:07 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D=20wip:?= =?UTF-8?q?=20Started=20cd=20and=20pwd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/builtins.h | 21 +++++++++ include/env.h | 4 +- src/builtins/ft_cd.c | 62 +++++++++++++++++++++++++ src/builtins/ft_pwd.c | 24 ++++++++++ src/main.c | 14 +++++- src/parsing/check_error/check_redir.c | 4 +- src/parsing/env_var/env_var_replace.c | 27 +++++++---- src/parsing/env_var/get_size_with_env.c | 5 +- src/parsing/is_inquote.c | 4 +- 9 files changed, 146 insertions(+), 19 deletions(-) create mode 100644 include/builtins.h create mode 100644 src/builtins/ft_cd.c create mode 100644 src/builtins/ft_pwd.c diff --git a/include/builtins.h b/include/builtins.h new file mode 100644 index 0000000..9294c11 --- /dev/null +++ b/include/builtins.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* builtins.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/22 13:05:18 by adjoly #+# #+# */ +/* Updated: 2024/06/24 12:47:28 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef BUILTINS_H +# define BUILTINS_H + +#include "env.h" + +void ft_pwd(t_env *env); +void ft_cd(t_env *env, char *args); + +#endif diff --git a/include/env.h b/include/env.h index 2995ac6..5c2259b 100644 --- a/include/env.h +++ b/include/env.h @@ -6,7 +6,7 @@ /* By: mmoussou +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/22 15:07:24 by adjoly #+# #+# */ +/* Updated: 2024/06/24 18:48:11 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" +#include "env.h" +#include "libft.h" + +char *__get_parent_directory(char *pwd) +{ + char *tmp; + char *dir; + char *parent; + + tmp = pwd; + while (*tmp) + { + if (*tmp == '/') + dir = tmp; + tmp++; + } + parent = ft_calloc(dir - pwd + 1, sizeof(char)); + ft_strlcpy(parent, pwd, dir - pwd + 1); + free(pwd); + return (parent); +} + +char *ret_cwd(void) +{ + +} + +void ft_cd(t_env *env, char *args) +{ + char *new_pwd; + + new_pwd = NULL; + pwd = getcwd(); + ft_putendl_fd(args, STDOUT_FILENO); + ft_putendl_fd(env_get_value("PWD", env), STDOUT_FILENO); + if (!args) + new_pwd = env_get_value("HOME", env); + else if (args[0] == '/') + new_pwd = ft_strdup(args); + else if (is_str(args, "..")) + new_pwd = __get_parent_directory(env_get_value("PWD", env)); + ret = chdir(new_pwd); + if (ret == -1) + { + } + env_edit("PWD", new_pwd, env); + free(args); + ft_putendl_fd(new_pwd, STDOUT_FILENO); +} diff --git a/src/builtins/ft_pwd.c b/src/builtins/ft_pwd.c new file mode 100644 index 0000000..760c606 --- /dev/null +++ b/src/builtins/ft_pwd.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_pwd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/22 13:02:02 by adjoly #+# #+# */ +/* Updated: 2024/06/24 12:33:50 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include "env.h" +#include "libft.h" + +void ft_pwd(t_env *env) +{ + char *pwd; + + pwd = env_get_value("PWD", env); + ft_putendl_fd(pwd, STDOUT_FILENO); + free(pwd); +} diff --git a/src/main.c b/src/main.c index f6d8677..76e4415 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: mmoussou #include #include "libft.h" +#include "builtins.h" #include "minishell.h" #include "parsing.h" #include "prompt.h" @@ -86,6 +87,17 @@ int main(int ac, char **av, char **env) continue ; if (is_str(test, "exit")) break ; + if (is_str(test, "pwd")) + { + ft_pwd(&env_l); + continue ; + } + if (is_str(test, "cd")) + { + ft_cd(&env_l, lll[1]); + continue ; + } + check_quote(test); piped = tokenizer(test); //check_redir(((t_token *)(piped->content))->redirection, av); cmd_list = get_cmd_list(piped, &env_l); diff --git a/src/parsing/check_error/check_redir.c b/src/parsing/check_error/check_redir.c index e6af42c..c4ef2c2 100644 --- a/src/parsing/check_error/check_redir.c +++ b/src/parsing/check_error/check_redir.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/28 18:17:26 by adjoly #+# #+# */ -/* Updated: 2024/05/30 12:52:51 by adjoly ### ########.fr */ +/* Updated: 2024/06/24 12:51:27 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,7 @@ void check_redir(t_list *redir, char **argv) t_redirection *tmp_redir; tmp = redir; - while(tmp) + while (tmp) { tmp_redir = tmp->content; if (tmp_redir->sign == HEREDOC && \ diff --git a/src/parsing/env_var/env_var_replace.c b/src/parsing/env_var/env_var_replace.c index 3c3b6df..def4f7e 100644 --- a/src/parsing/env_var/env_var_replace.c +++ b/src/parsing/env_var/env_var_replace.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/05 21:14:04 by adjoly #+# #+# */ -/* Updated: 2024/06/20 14:34:25 by adjoly ### ########.fr */ +/* Updated: 2024/06/24 12:57:59 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,20 @@ #include "parsing.h" #include "env.h" +void __cpy_dollar(char *tmp, size_t dollar_size, t_env *env, char **rl_dlrd) +{ + char *dollar; + + dollar = env_getn_value(tmp, env, dollar_size - 1); + if (!dollar) + { + tmp += dollar_size; + return ; + } + ft_strlcat(*rl_dlrd, dollar, \ + ft_strlen(dollar) + ft_strlen(*rl_dlrd) + 1); +} + size_t strlen_till_notalnum(char *s) { char *tmp; @@ -30,8 +44,7 @@ char *env_var_replace(char *readline, t_env *env) char *tmp; char *rl_dollared; size_t dollar_size; - char *dollar; - + rl_dollared = ft_calloc(get_size_with_env(readline, env) + 1, sizeof(char)); if (rl_dollared == NULL) return (NULL); @@ -42,13 +55,7 @@ char *env_var_replace(char *readline, t_env *env) { tmp++; dollar_size = strlen_till_notalnum(tmp); - dollar = env_getn_value(tmp, env, dollar_size - 1); - if (!dollar) - { - tmp += dollar_size; - continue ; - } - ft_strlcat(rl_dollared, dollar, ft_strlen(dollar) + ft_strlen(rl_dollared) + 1); + __cpy_dollar(tmp, dollar_size, env, &rl_dollared); tmp += dollar_size; } else diff --git a/src/parsing/env_var/get_size_with_env.c b/src/parsing/env_var/get_size_with_env.c index e54570a..327554b 100644 --- a/src/parsing/env_var/get_size_with_env.c +++ b/src/parsing/env_var/get_size_with_env.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/06 15:01:19 by adjoly #+# #+# */ -/* Updated: 2024/06/10 17:11:16 by adjoly ### ########.fr */ +/* Updated: 2024/06/24 12:51:59 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,8 @@ size_t get_size_with_env(char *readline, t_env *env) size = ft_strlen(readline); while (*tmp) { - if (*tmp == '$' && is_inquote(tmp, tmp - readline) != SINGLE && is_inquote(tmp, tmp - readline) != NOT_CLOSED) + if (*tmp == '$' && is_inquote(tmp, tmp - readline) != SINGLE && \ + is_inquote(tmp, tmp - readline) != NOT_CLOSED) { tmp++; size -= strlen_till_char(tmp, ' '); diff --git a/src/parsing/is_inquote.c b/src/parsing/is_inquote.c index ffe3255..95ad475 100644 --- a/src/parsing/is_inquote.c +++ b/src/parsing/is_inquote.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/20 20:06:13 by adjoly #+# #+# */ -/* Updated: 2024/06/20 17:41:33 by adjoly ### ########.fr */ +/* Updated: 2024/06/24 12:50:58 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,7 @@ t_quote __is_quote(char c) { - if (c == SINGLE) + if (c == SINGLE) return (SINGLE); if (c == DOUBLE) return (DOUBLE);