From 1e8fe6e5a7d6a8cb403c583c2846b3df112ddb47 Mon Sep 17 00:00:00 2001 From: PrStein Date: Thu, 7 Apr 2022 23:23:14 +0200 Subject: [PATCH] plus de segfault apres la racine --- srcs/built_in/cd.c | 70 ++++++++++++++---------------------- srcs/built_in/init_builtin.c | 9 +++-- 2 files changed, 34 insertions(+), 45 deletions(-) diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index eed4a82..9778c80 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -55,13 +55,15 @@ 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); - printf("-------------\n"); - printf("%s\n", cmd->env[find_pwd(cmd)]); - printf("%d\n", find_pwd(cmd)); + // printf ("-->%s\n", r); // free(cmd->env[find_pwd(cmd)]); - cmd->env[find_pwd(cmd)] = r; - // cmd->env[find_pwd(cmd)] = ft_strdup(r); - free(r); + if (r) + cmd->env[find_pwd(cmd)] = ft_strdup(r); + else + cmd->env[find_pwd(cmd)] = ft_strdup("PWD=/"); + + if (r) + free(r); } void add_one(t_s_cmd *cmd, char *str) @@ -70,28 +72,11 @@ 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; @@ -99,26 +84,27 @@ 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) - // { - // printf("--->%s\n", cmd->env[i]); - // break ; - // } - // i++; - // } + while (cmd->env[i]) + { + if (ft_strncmp(cmd->env[i], "OLDPWD=", 7) == 0) + break ; + i++; + } + // printf("%d\n", i); /*if (cmd->env[i]) free(cmd->env[i]);*/ - if (find_it(cmd, "OLDPWD") == 1) - cmd->env[i] = ft_strjoin("OLD", cmd->env[find_pwd(cmd)]); + cmd->env[i] = ft_strjoin("OLD", cmd->env[find_pwd(cmd)]); i = 0; - while (tab[i]) + while (tab[i] && tab_len(tab) > 4) { + // printf("%d -> %s\n", tab_len(tab), tab[i]); + // if (tab_len(tab) < 2) + // break ; if (ft_strcmp(tab[i], "..") == 0) del_one(cmd); else add_one(cmd, tab[i]); + i++; } } @@ -130,9 +116,7 @@ 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])); @@ -149,10 +133,10 @@ void open_directory(t_s_cmd *cmd) j = tab_len(str); if (!cmd->args[1]) { - reboot_pwd(cmd, j); - // 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) { @@ -179,4 +163,4 @@ void ft_pwd(t_s_cmd *cmd) j++; } write(1, "\n", 1); -} +} \ No newline at end of file diff --git a/srcs/built_in/init_builtin.c b/srcs/built_in/init_builtin.c index bb82efb..96c9487 100644 --- a/srcs/built_in/init_builtin.c +++ b/srcs/built_in/init_builtin.c @@ -113,9 +113,14 @@ int find_pwd(t_s_cmd *cmd) int i; i = 0; - while (cmd->env[i] && ft_strncmp(cmd->env[i], "PWD=", 4) != 0) + while (cmd->env[i]) + { + if (!ft_strncmp(cmd->env[i], "PWD=", 4)) + return (i); i++; - return (i); + } + return (0); + // printf("%s\n", cmd->env[i]); } void init_s_cmd(t_s_cmd *cmd, char **env)