From 7568a9aa4137cd9d8282abfd767764c305e731d8 Mon Sep 17 00:00:00 2001 From: PrStein Date: Sat, 16 Apr 2022 04:50:01 +0200 Subject: [PATCH] leaks cd --- srcs/built_in/cd.c | 88 +++++++++++++++++++++++++-------------------- srcs/built_in/env.c | 6 +--- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index bc5fdbc..1b45d2e 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -38,63 +38,73 @@ void ft_ls(char *input) void del_one(t_s_cmd *cmd) { int i; + int j; char *r; - if (find_it(cmd->big_cmd->env, "PWD")) + if (find_it(cmd->big_cmd->env, "PWD") != -1) { - - i = ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); - while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")][i] != '/') - i--; - r = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], 0, i); - if (r) - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r); - else - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup("PWD=/"); + j = find_it(cmd->big_cmd->env, "PWD"); + i = ft_strlen(cmd->big_cmd->env[j]); + while (cmd->big_cmd->env[j][i] && cmd->big_cmd->env[j][i] != '/') + i--; + r = ft_substr(cmd->big_cmd->env[j], 0, i); + free (cmd->big_cmd->env[j]); + if (r) + cmd->big_cmd->env[j] = ft_strdup(r); + else + cmd->big_cmd->env[j] = ft_strdup("PWD=/"); if (r) free(r); } } -void add_one(t_s_cmd *cmd, char *str) +void add_one(t_s_cmd *cmd) { - char *r; - char *s; + // char *r; + // char *s; - s = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], "/"); - r = ft_strjoin(s, str); - //free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r); - free(r); - free(s); + // s = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], "/"); + // r = ft_strjoin(s, str); + // // free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); + // cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r); + // free(r); + // free(s); + char p[1024]; + char *str; + int i; + + i = find_it(cmd->big_cmd->env, "PWD"); + str = getcwd(p, sizeof(p)); + cmd->big_cmd->env[i] = ft_strjoin("PWD=", p); } void change_path(t_s_cmd *cmd) { - char **tab; - int i; + // char **tab; + int old; + int pwd; - tab = ft_split(cmd->args[1], '/'); - i = find_it(cmd->big_cmd->env, "OLDPWD"); - // while (cmd->big_cmd->env[i]) - // { - // if (ft_strncmp(cmd->big_cmd->env[i], "OLDPWD=", 7) == 0) - // break ; - // i++; - // } - cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); - i = 0; - while (tab[i]) + // tab = ft_split(cmd->args[1], '/'); + if (find_it(cmd->big_cmd->env, "OLDPWD") != -1) { - if (ft_strcmp(tab[i], "..") == 0) - del_one(cmd); - else - add_one(cmd, tab[i]); - i++; + pwd = find_it(cmd->big_cmd->env, "PWD"); + old = find_it(cmd->big_cmd->env, "OLDPWD"); + cmd->big_cmd->env[old] = ft_strjoin("OLD", cmd->big_cmd->env[pwd]); + // old = 0; + // while (tab[old]) + // { + // if (ft_strcmp(tab[old], "..") == 0) + // del_one(cmd); + // else + // old++; + // } } - if (tab) - free_double(tab); + add_one(cmd); + + + // if (tab) + // free_double(tab); } void reboot_pwd(t_s_cmd *cmd, int i) diff --git a/srcs/built_in/env.c b/srcs/built_in/env.c index 3ffce80..4d542dc 100644 --- a/srcs/built_in/env.c +++ b/srcs/built_in/env.c @@ -19,9 +19,7 @@ int print_env(t_cmd *cmd) i = 0; if (cmd->current_s_cmd->nb_args > 1) { - ft_putstr_fd("Minishell: env: '", 2); - ft_putstr_fd(cmd->current_s_cmd->args[1], 2); - ft_putstr_fd("': No such file or directory\n", 2); + ft_putstr_fd("Minishell: env: too many arguments\n", 2); return (check_return(cmd->current_s_cmd, 127)); } else if (cmd->env) @@ -38,11 +36,9 @@ int print_env(t_cmd *cmd) int ft_pwd(t_s_cmd *cmd) { - int i; char p[1024]; char *str; - i = 1; str = getcwd(p, sizeof(p)); if (!str) {