Пример #1
0
void	ft_path(t_info *info)
{
	char	*tmp;
	char	*pwd_tmp;

	info->error = 0;
	if (!(pwd_tmp = getcwd(NULL, 0)))
	{
		if (info->w == 0 && ft_strcmp(info->av[1], "..") == 0)
		{
			ft_cd_error(info, 1);
			return ;
		}
		else
			pwd_tmp = ft_strdup(get_element(info, "PWD", 1));
	}
	if ((chdir(info->av[1])) != 0)
		(access(info->av[1], F_OK)) ? ft_cd_error(info, 1) :
		ft_cd_error(info, 3);
	else
	{
		rep_element(info->lst, "OLDPWD", pwd_tmp);
		tmp = getcwd(NULL, 0);
		rep_element(info->lst, "PWD", tmp);
		free(tmp);
	}
	free(pwd_tmp);
}
Пример #2
0
void	ft_cd_plus(t_info *info, char *home)
{
	if (chdir(home) != 0 && info->error == 2)
	{
		ft_cd_error(info, 4);
		ft_putstr_fd(home, 2);
		ft_putstr_fd("\n", 2);
	}
	(info->error != 2 && info->error != 0) ? ft_cd_error(info, 2) : 1;
	if (info->error == 0)
	{
		rep_element(info->lst, "OLDPWD", get_element(info, "PWD", 1));
		rep_element(info->lst, "PWD", home);
	}
}
Пример #3
0
void		ft_cd(t_term *term)
{
	struct stat			bufstat;

	ft_cd2(term);
	if (term->cmds[1] && term->cmds[1][0] == '~' && term->cmds[1][1])
	{
		if (!ft_get_val_exists(term, "HOME"))
			return (ft_putendl("NO HOME"));
		term->cmds[1] = ft_strjoin(ft_get_val(term, "HOME"), &term->cmds[1][1]);
	}
	if (!term->cmds[1] || (term->cmds[1] && term->cmds[1][0] == '~'))
		return (ft_cd_home(term));
	else
	{
		if (access(term->cmds[1], R_OK))
			return (ft_cd_error(term->cmds[1]));
		if (lstat(term->cmds[1], &bufstat) == -1)
		{
			return (ft_putendl(ft_strjoin(
			"cd: no such file or directory: ", term->cmds[1])));
		}
	}
	ft_cd_suite(term);
}