」 feat: CD finished need valgrind fix but it's fine

This commit is contained in:
2024-06-25 16:31:55 +02:00
parent db8435b6c2
commit e7a5e8041b
2 changed files with 17 additions and 9 deletions

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 15:07:24 by adjoly #+# #+# */ /* Created: 2024/06/22 15:07:24 by adjoly #+# #+# */
/* Updated: 2024/06/25 13:47:17 by adjoly ### ########.fr */ /* Updated: 2024/06/25 15:03:15 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -41,11 +41,18 @@ char *__relative_path(char *args, char *pwd)
path = ft_split(args, '/'); path = ft_split(args, '/');
tmp = path; tmp = path;
new_path = pwd; new_path = ft_strdup(pwd);
if (!new_path)
return (NULL);
while (*tmp) while (*tmp)
{ {
if (is_str(*tmp, "..")) if (is_str(*tmp, ".."))
new_path = __get_parent_directory(new_path); new_path = __get_parent_directory(new_path);
else if (*tmp)
{
ft_strlcat(new_path, "/", ft_strlen(new_path) + 2);
ft_strlcat(new_path, *tmp, ft_strlen(new_path) + ft_strlen(*tmp) + 1);
}
tmp++; tmp++;
} }
return (new_path); return (new_path);
@ -59,20 +66,19 @@ void ft_cd(t_env *env, char *args)
new_pwd = NULL; new_pwd = NULL;
pwd = ret_cwd(); pwd = ret_cwd();
ft_putendl_fd(args, STDOUT_FILENO); ft_putendl_fd(env_get_value("OLDPWD", env), STDOUT_FILENO);
ft_putendl_fd(pwd, STDOUT_FILENO);
if (!args) if (!args)
new_pwd = env_get_value("HOME", env); new_pwd = env_get_value("HOME", env);
else if (args[0] == '/') else if (args[0] == '/')
new_pwd = ft_strdup(args); new_pwd = ft_strdup(args);
else if (args[0] == '-')
new_pwd = env_get_value("OLDPWD", env);
else else
new_pwd = __get_parent_directory(pwd); new_pwd = __relative_path(args, pwd);
ft_putendl_fd(new_pwd, STDOUT_FILENO);
ret = chdir(new_pwd); ret = chdir(new_pwd);
if (ret == -1) if (ret == -1)
{
return ; return ;
}
env_edit("PWD", new_pwd, env); env_edit("PWD", new_pwd, env);
env_edit("OLDPWD", ft_strdup(pwd), env);
free(args); free(args);
} }

View File

@ -6,16 +6,18 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/25 10:41:43 by adjoly #+# #+# */ /* Created: 2024/06/25 10:41:43 by adjoly #+# #+# */
/* Updated: 2024/06/25 10:44:01 by adjoly ### ########.fr */ /* Updated: 2024/06/25 15:05:04 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "builtins.h" #include "builtins.h"
#include "libft.h"
#include <unistd.h> #include <unistd.h>
char *ret_cwd(void) char *ret_cwd(void)
{ {
char buf[PATH_MAX_LEN]; char buf[PATH_MAX_LEN];
ft_bzero(buf, PATH_MAX_LEN);
return (getcwd(buf, PATH_MAX_LEN)); return (getcwd(buf, PATH_MAX_LEN));
} }