From ad18ecdeace03fd97dda678bc7c399d44aeaa34b Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 7 Apr 2022 19:17:13 +0200 Subject: [PATCH] modif cd --- includes/minishell.h | 2 ++ srcs/built_in/cd.c | 55 +++++++++++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/includes/minishell.h b/includes/minishell.h index 83f10e2..5040e76 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -94,6 +94,8 @@ int find_pwd(t_s_cmd *cmd); void init_s_cmd(t_s_cmd *cmd, char **env); int tab_len(char **tab); int find_len(char *input, int i, char c); +int find_it(t_s_cmd *cmd, char *str); + //real builtin void ft_env(t_s_cmd *cmd, char **env); void ft_exit(t_s_cmd *cmd); diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index 407d283..eed4a82 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -55,8 +55,12 @@ void del_one(t_s_cmd *cmd) while (cmd->env[find_pwd(cmd)][i] != '/') i--; r = ft_substr(cmd->env[find_pwd(cmd)], 0, i); - free(cmd->env[find_pwd(cmd)]); - cmd->env[find_pwd(cmd)] = ft_strdup(r); + printf("-------------\n"); + printf("%s\n", cmd->env[find_pwd(cmd)]); + printf("%d\n", find_pwd(cmd)); + // free(cmd->env[find_pwd(cmd)]); + cmd->env[find_pwd(cmd)] = r; + // cmd->env[find_pwd(cmd)] = ft_strdup(r); free(r); } @@ -66,11 +70,28 @@ void add_one(t_s_cmd *cmd, char *str) r = ft_strjoin(cmd->env[find_pwd(cmd)], "/"); r = ft_strjoin(r, str); - //free(cmd->env[find_pwd(cmd)]); + // free(cmd->env[find_pwd(cmd)]); cmd->env[find_pwd(cmd)] = ft_strdup(r); free(r); } +int find_it(t_s_cmd *cmd, char *str) +{ + int i; + + i = 0; + while (cmd->env[i]) + { + if (ft_strncmp(cmd->env[i], str, ft_strlen(str)) == 0) + { + printf("--->%s\n", cmd->env[i]); + return (1); + } + i++; + } + return (0); +} + void change_path(t_s_cmd *cmd) { char **tab; @@ -78,16 +99,19 @@ void change_path(t_s_cmd *cmd) i = 0; tab = ft_split(cmd->args[1], '/'); - while (cmd->env[i]) - { - if (ft_strncmp(cmd->env[i], "OLDPWD=", 7) == 0) - break ; - i++; - } - printf("%d\n", i); + // while (cmd->env[i]) + // { + // if (ft_strncmp(cmd->env[i], "OLDPWD=", 7) == 0) + // { + // printf("--->%s\n", cmd->env[i]); + // break ; + // } + // i++; + // } /*if (cmd->env[i]) free(cmd->env[i]);*/ - cmd->env[i] = ft_strjoin("OLD", cmd->env[find_pwd(cmd)]); + if (find_it(cmd, "OLDPWD") == 1) + cmd->env[i] = ft_strjoin("OLD", cmd->env[find_pwd(cmd)]); i = 0; while (tab[i]) { @@ -106,7 +130,9 @@ void reboot_pwd(t_s_cmd *cmd, int i) while (i > 3) { if (chdir("..") == 0) + { del_one(cmd); + } i--; } str = ft_substr(cmd->args[1], 2, ft_strlen(cmd->args[1])); @@ -123,9 +149,10 @@ void open_directory(t_s_cmd *cmd) j = tab_len(str); if (!cmd->args[1]) { - while (j-- > 3) - if (chdir("..") == 0) - del_one(cmd); + reboot_pwd(cmd, j); + // while (j-- > 3) + // if (chdir("..") == 0) + // del_one(cmd); } if (tab_len(cmd->args) == 2) {