From 817ed058dd381a3f27c6cc237f844ab9b0231660 Mon Sep 17 00:00:00 2001 From: Adam Joly Date: Sat, 29 Jun 2024 20:05:18 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat:=20echo=20do?= =?UTF-8?q?ne(hopefully)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/builtins.h | 3 +- include/error_msg.h | 3 +- src/builtins/ft_cd.c | 14 ++++++--- src/builtins/ft_echo.c | 60 ++++++++++++++++++++++++++++++++++++ src/main.c | 7 ++++- src/{builtins => }/ret_cwd.c | 0 6 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 src/builtins/ft_echo.c rename src/{builtins => }/ret_cwd.c (100%) diff --git a/include/builtins.h b/include/builtins.h index 56027ee..9d41518 100644 --- a/include/builtins.h +++ b/include/builtins.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/22 13:05:18 by adjoly #+# #+# */ -/* Updated: 2024/06/27 15:38:17 by mmoussou ### ########.fr */ +/* Updated: 2024/06/29 19:39:01 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,7 @@ void ft_pwd(void); void ft_cd(t_env *env, char *args); +void ft_echo(char **args); char *ret_cwd(void); void ft_env(t_env *env); diff --git a/include/error_msg.h b/include/error_msg.h index eb27d4a..f858406 100644 --- a/include/error_msg.h +++ b/include/error_msg.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/20 20:25:06 by adjoly #+# #+# */ -/* Updated: 2024/06/24 10:54:36 by mmoussou ### ########.fr */ +/* Updated: 2024/06/29 16:25:47 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ # define ERROR_SYNTAX ": syntax error" # define ERROR_NO_REDIR ": need redirection file" # define ERROR_NO_EOF ": need delimiter to heredoc" +# define ERROR_NO_FILE "No such file or directory" # define ERROR_COREDUMP "(core dumped)" diff --git a/src/builtins/ft_cd.c b/src/builtins/ft_cd.c index 06f94ff..e0c7dd6 100644 --- a/src/builtins/ft_cd.c +++ b/src/builtins/ft_cd.c @@ -6,10 +6,11 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/22 15:07:24 by adjoly #+# #+# */ -/* Updated: 2024/06/25 17:13:46 by adjoly ### ########.fr */ +/* Updated: 2024/06/29 16:36:56 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ +#include "error_msg.h" #include "minishell.h" #include "env.h" #include "libft.h" @@ -39,7 +40,7 @@ char *__relative_path(char *args, char *pwd) path = ft_split(args, '/'); tmp = path; - new_path = ft_strdup(pwd); + new_path = pwd; if (!new_path) return (NULL); while (*tmp) @@ -54,7 +55,9 @@ char *__relative_path(char *args, char *pwd) } tmp++; } - return (new_path); + *tmp = ft_strdup(new_path); + ft_free("a", path); + return (*tmp); } void ft_cd(t_env *env, char *args) @@ -75,8 +78,11 @@ void ft_cd(t_env *env, char *args) new_pwd = __relative_path(args, pwd); ret = chdir(new_pwd); if (ret == -1) + { + printf("./minishell: cd: %s: %s\n", args, ERROR_NO_FILE); return ; - env_edit("PWD", new_pwd, env); + } + env_edit("PWD", ft_strdup(new_pwd), env); env_edit("OLDPWD", ft_strdup(pwd), env); free(args); } diff --git a/src/builtins/ft_echo.c b/src/builtins/ft_echo.c new file mode 100644 index 0000000..184dd77 --- /dev/null +++ b/src/builtins/ft_echo.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_echo.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/06/29 19:19:57 by adjoly #+# #+# */ +/* Updated: 2024/06/29 20:04:36 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +//#include +#include "libft.h" +#include + +size_t __nl_option(char **args) +{ + char **tmp; + char *tmp_arg; + size_t i; + + tmp = args; + i = 0; + while ((*tmp)[0] == '-' && (*tmp)[1] == 'n') + { + tmp_arg = (*tmp); + tmp_arg++; + while (*tmp_arg == 'n') + tmp_arg++; + if (*tmp_arg) + break ; + i++; + tmp++; + } + return (i); +} + +void ft_echo(char **args) +{ + char **tmp; + bool new_line; + + tmp = args; + if (__nl_option(args) > 0) + new_line = false; + else + new_line = true; + tmp += __nl_option(args); + while (*tmp) + { + ft_putstr_fd(*tmp, STDOUT_FILENO); + tmp++; + if (*tmp != NULL) + ft_putchar_fd(' ', STDOUT_FILENO); + } + if (new_line == true) + ft_putchar_fd('\n', STDOUT_FILENO); +} diff --git a/src/main.c b/src/main.c index 39a6579..a9e2dde 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: mmoussou