diff --git a/includes/minishell.h b/includes/minishell.h index 1280528..17bd4c0 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -107,9 +107,12 @@ void init_s_cmd(t_s_cmd *cmd, char **env); int tab_len(char **tab); int find_len(char *input, int i, char c); void lone_export(t_s_cmd *cmd); -int find_variable(char *variable, t_s_cmd *cmd); +int find_variable(char *variable, t_s_cmd *cmd); int find_it(char **str, char *s); int check_variable(char *variable); +int cd_error_simple(char *str, int i); +int msg_error(char *cmd, char *entry, char *error, int i); +int size_path(char **str); //real builtin void print_env(t_cmd *cmd); diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index 5816608..58e8608 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -112,38 +112,52 @@ void reboot_pwd(t_s_cmd *cmd, int i) free(str); } +void check_home(t_s_cmd *cmd, char *p) +{ + int home; + int len_home; + int old_pwd; + int pwd; + + home = find_it(cmd->big_cmd->env, "HOME"); + len_home = ft_strlen(cmd->big_cmd->env[home]); + old_pwd = find_it(cmd->big_cmd->env, "OLDPWD"); + pwd = find_it(cmd->big_cmd->env, "PWD"); + + p = ft_substr(cmd->big_cmd->env[home], 5, ft_strlen(cmd->big_cmd->env[len_home])); + if (chdir(p) == 0) + if (find_it(cmd->big_cmd->env, "PWD") != -1) + { + cmd->big_cmd->env[old_pwd] = ft_strjoin("OLD", cmd->big_cmd->env[pwd]); + cmd->big_cmd->env[pwd] = ft_strjoin("PWD=", p); + } + free(p); +} + void open_directory(t_s_cmd *cmd) { char **str; + char *p; int j; + p = NULL; if (find_it(cmd->big_cmd->env, "PWD") != -1) - { - str = ft_split(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], '/'); - j = double_size(str); - free_double(str); - } + j = size_path(cmd->big_cmd->env); if (cmd->nb_args > 2) { - printf("Minishell: cd: too many arguments\n"); - // return (1); + ft_putstr_fd("Minishell: cd: too many arguments\n", 2); + return ; + // return (cd_erreur("Minishell: cd: too many arguments", 1)); } if (!cmd->args[1]) { if (find_it(cmd->big_cmd->env, "HOME") < 0) { - printf("Minishell: cd: HOME not set\n"); - cmd->big_cmd->err_var = 1; - // return (1); + ft_putstr_fd("Minishell: cd: HOME not set", 2); + return ; + // return (cd_erreur("Minishell: cd: HOME not set", 1)); } - char *p = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME")], 5, ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME")])); - if (chdir(p) == 0) - if (find_it(cmd->big_cmd->env, "PWD") != -1) - { - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "OLDPWD")] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strjoin("PWD=", p); - } - free(p); + check_home(cmd, p); } if (tab_len(cmd->args) == 2) { @@ -156,10 +170,11 @@ void open_directory(t_s_cmd *cmd) } else { + // return (msg_error("Minishell: cd: ", cmd->args[1], ": No such directory\n", 1)); ft_putstr_fd("Minishell: cd: ", 2); ft_putstr_fd(cmd->args[1], 2); ft_putstr_fd(": No such directory\n", 2); - // return (1); + return ;//(1); } } } diff --git a/srcs/built_in/utils_builtin.c b/srcs/built_in/utils_builtin.c index df4cd1a..3fe5219 100644 --- a/srcs/built_in/utils_builtin.c +++ b/srcs/built_in/utils_builtin.c @@ -34,3 +34,31 @@ int find_it(char **str, char *s) return (-1); return (i); } + +int cd_error_simple(char *str, int i) +{ + ft_putstr_fd(str, 2); + ft_putstr_fd("\n", 2); + return (i); +} + +int msg_error(char *cmd, char *entry, char *error, int i) +{ + ft_putstr_fd(cmd, 2); + ft_putstr_fd(entry, 2); + ft_putstr_fd(error, 2); + return (i); +} + +int size_path(char **str) +{ + int i; + int j; + char **s; + + i = find_it(str, "PWD"); + s = ft_split(str[i], '/'); + j = double_size(s); + free_double(s); + return (j); +} \ No newline at end of file