From c19ee394f0f22a94670725dd381bf444eeefdf74 Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 25 Mar 2017 20:26:29 +0100 Subject: [PATCH 1/3] close #197 --- 42sh/Makefile | 4 ++-- 42sh/src/history/add_str_in_history.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/42sh/Makefile b/42sh/Makefile index 6e004cc0..a4e0a497 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -6,14 +6,14 @@ # By: wescande +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2016/08/29 21:32:58 by wescande #+# #+# # -# Updated: 2017/03/24 23:52:56 by ariard ### ########.fr # +# Updated: 2017/03/25 20:15:36 by jhalford ### ########.fr # # # # **************************************************************************** # NAME = 42sh CC = gcc -FLAGS = -Wall -Wextra -Werror -fsanitize=address#-fvisibility=hidden +FLAGS = -Wall -Wextra -Werror D_FLAGS = -g DELTA = $$(echo "$$(tput cols)-47"|bc) diff --git a/42sh/src/history/add_str_in_history.c b/42sh/src/history/add_str_in_history.c index 6340ed5b..0ccfaff2 100644 --- a/42sh/src/history/add_str_in_history.c +++ b/42sh/src/history/add_str_in_history.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/14 11:27:03 by gwojda #+# #+# */ -/* Updated: 2017/03/23 11:30:30 by gwojda ### ########.fr */ +/* Updated: 2017/03/25 20:26:01 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,9 +21,9 @@ void ft_add_in_history_file(char *str) char **hist; i = 0; - hist = ft_strsplit(str, '\n'); if (!(home = ft_getenv(data_singleton()->env, "HOME"))) return ; + hist = ft_strsplit(str, '\n'); path = ft_str3join(home, "/", ".42sh_history"); fd = open(path, O_CREAT | O_WRONLY | O_APPEND, S_IWUSR | S_IRUSR); if (fd > 0) @@ -43,10 +43,10 @@ void ft_add_in_history_file(char *str) void ft_add_str_in_history(char *str) { if (str && *str && (!data_singleton()->line.list_beg || - ft_strcmp(data_singleton()->line.list_beg->prev->str, str))) + ft_strcmp(data_singleton()->line.list_beg->prev->str, str))) { ft_push_back_history(&data_singleton()->line.list_beg, - ft_create_history_list(str)); + ft_create_history_list(str)); ft_add_in_history_file(str); } } From ad2c79043b8324dfece9c94c7aef65d40f8bd86a Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sat, 25 Mar 2017 20:41:49 +0100 Subject: [PATCH 2/3] env norme --- 42sh/Makefile | 1 + 42sh/includes/builtin.h | 2 +- 42sh/src/builtin/bt_env_opt.c | 38 ++++++++++++++++++++++++++++++++++ 42sh/src/builtin/builtin_env.c | 27 +----------------------- 42sh/src/main/data_exit.c | 2 +- 5 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 42sh/src/builtin/bt_env_opt.c diff --git a/42sh/Makefile b/42sh/Makefile index 765c032e..0644fd8f 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -33,6 +33,7 @@ SRC_BASE = \ builtin/bt_cd_getpath.c\ builtin/bt_cd_process_dotdot.c\ builtin/bt_cd_process_symlink.c\ +builtin/bt_env_opt.c\ builtin/bt_read_get.c\ builtin/bt_read_term.c\ builtin/builtin_cd.c\ diff --git a/42sh/includes/builtin.h b/42sh/includes/builtin.h index 057430bb..d8894ac3 100644 --- a/42sh/includes/builtin.h +++ b/42sh/includes/builtin.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/14 22:59:57 by jhalford #+# #+# */ -/* Updated: 2017/03/25 16:49:54 by ariard ### ########.fr */ +/* Updated: 2017/03/25 20:40:22 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/builtin/bt_env_opt.c b/42sh/src/builtin/bt_env_opt.c new file mode 100644 index 00000000..b48dfba4 --- /dev/null +++ b/42sh/src/builtin/bt_env_opt.c @@ -0,0 +1,38 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* bt_env_opt.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/25 20:39:54 by jhalford #+# #+# */ +/* Updated: 2017/03/25 20:40:24 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int bt_env_opt_i(char *opt_arg, t_env_data *data) +{ + (void)opt_arg; + ft_tabdel(&data->custom_env); + return (0); +} + +int bt_env_opt_u(char *opt_arg, t_env_data *data) +{ + int i; + char **env; + + if (!(env = data->custom_env)) + return (0); + i = -1; + while (env[++i]) + { + if (ft_strcmp(env[i], opt_arg) == '=' + && ft_strlen(opt_arg) == ft_strlenchr(env[i], '=')) + ft_sstrdel(env, i); + } + return (0); +} + diff --git a/42sh/src/builtin/builtin_env.c b/42sh/src/builtin/builtin_env.c index 4f17fbbf..f2c6284b 100644 --- a/42sh/src/builtin/builtin_env.c +++ b/42sh/src/builtin/builtin_env.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/03/22 16:20:31 by gwojda #+# #+# */ -/* Updated: 2017/03/25 15:10:52 by jhalford ### ########.fr */ +/* Updated: 2017/03/25 20:40:41 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,31 +23,6 @@ static t_cliopts g_env_opts[] = {0, 0, 0, 0, 0, 0}, }; -int bt_env_opt_i(char *opt_arg, t_env_data *data) -{ - (void)opt_arg; - ft_tabdel(&data->custom_env); - return (0); -} - -int bt_env_opt_u(char *opt_arg, t_env_data *data) -{ - DG(); - int i; - char **env; - - if (!(env = data->custom_env)) - return (0); - i = -1; - while (env[++i]) - { - if (ft_strcmp(env[i], opt_arg) == '=' - && ft_strlen(opt_arg) == ft_strlenchr(env[i], '=')) - ft_sstrdel(env, i); - } - return (0); -} - static int bt_env_getcustom(char ***av, t_env_data *data) { if (!av || !*av || !data) diff --git a/42sh/src/main/data_exit.c b/42sh/src/main/data_exit.c index c05439ac..753ea33f 100644 --- a/42sh/src/main/data_exit.c +++ b/42sh/src/main/data_exit.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/07 18:07:50 by jhalford #+# #+# */ -/* Updated: 2017/03/24 15:55:08 by wescande ### ########.fr */ +/* Updated: 2017/03/25 20:27:32 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ From 9c760947caa0e2ec8672dd671c4473fb8642de78 Mon Sep 17 00:00:00 2001 From: william Date: Sat, 25 Mar 2017 20:44:21 +0100 Subject: [PATCH 3/3] rectif droits pour le cd --- 42sh/src/builtin/bt_cd_process_dotdot.c | 16 ++++++++++------ 42sh/src/builtin/bt_cd_process_symlink.c | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/42sh/src/builtin/bt_cd_process_dotdot.c b/42sh/src/builtin/bt_cd_process_dotdot.c index 6396be2c..ac79ea4f 100644 --- a/42sh/src/builtin/bt_cd_process_dotdot.c +++ b/42sh/src/builtin/bt_cd_process_dotdot.c @@ -12,18 +12,22 @@ #include "minishell.h" -#define CDERR_6 "cd : %s: Permission denied" -#define CDERR_7 "cd : %s: No such file or directory" +#define CDERR_0 "cd : %s: No such file or directory" +#define CDERR_1 "cd : %s: Permission denied" +#define CDERR_2 "cd : %s: Not a directory" +#define CDERR_3 "cd : unable to proceed: %s" int bt_cd_process_dotdot(char *target) { DG(); + if (access(target, F_OK)) + return (SH_ERR(CDERR_0, target)); + if (access(target, X_OK)) + return (SH_ERR(CDERR_1, target)); if (!is_directory(target)) - return (SH_ERR(CDERR_7, target)); - if (access(target, R_OK) < 0) - return (SH_ERR(CDERR_6, target)); + return (SH_ERR(CDERR_2, target)); if (chdir(target)) - return (SH_ERR(CDERR_7, target)); + return (SH_ERR(CDERR_3, target)); setwd("PWD"); return (0); } diff --git a/42sh/src/builtin/bt_cd_process_symlink.c b/42sh/src/builtin/bt_cd_process_symlink.c index c8d2afe1..3dc20512 100644 --- a/42sh/src/builtin/bt_cd_process_symlink.c +++ b/42sh/src/builtin/bt_cd_process_symlink.c @@ -12,24 +12,28 @@ #include "minishell.h" -#define CDERR_3 "cd : %s: Permission denied" -#define CDERR_4 "cd : %s: No such file or directory" -#define CDERR_5 "cd : %s: Symlink not resolved" +#define CDERR_0 "cd : %s: No such file or directory" +#define CDERR_1 "cd : %s: Permission denied" +#define CDERR_2 "cd : %s: Not a directory" +#define CDERR_3 "cd : unable to proceed: %s" +#define CDERR_4 "cd : %s: Symlink not resolved" int bt_cd_process_symlink(char *target) { char buffer[PATH_MAX + 1]; ft_bzero(buffer, PATH_MAX + 1); + if (access(target, F_OK)) + return (SH_ERR(CDERR_0, target)); + if (access(target, X_OK)) + return (SH_ERR(CDERR_1, target)); if (!is_directory(target)) - return (SH_ERR(CDERR_4, target)); - if (!access(target, R_OK)) - return (SH_ERR(CDERR_3, target)); + return (SH_ERR(CDERR_2, target)); if (chdir(target)) - return (SH_ERR(CDERR_4, target)); + return (SH_ERR(CDERR_3, target)); setwd("PWD"); if (readlink(target, buffer, PATH_MAX + 1) < 0) - return (SH_ERR(CDERR_5, target)); + return (SH_ERR(CDERR_4, target)); else if (ft_strlen(buffer) > 0) builtin_setenv(NULL, (char*[]){"cd", "PWD", buffer, NULL}, NULL); return (0);