Example #1
0
int				ft_change_pwd(char *path, t_cmd *cmd)
{
	struct stat	infos;
	int			error;
	int			ret;

	error = 0;
	ret = 0;
	ret = stat(path, &infos);
	if (access(path, F_OK) != 0)
		error = NOTEXIST;
	else if (!(S_IFDIR == (infos.st_mode & S_IFMT)))
		error = NOTDIR;
	else if (access(path, X_OK) != 0)
		error = NOTACCESS;
	if (ret == -1 && !error)
		error = UNDEF;
	if (error)
		ft_put_error(error, cmd->args[1]);
	else
	{
		ft_update_env(cmd->envp, "OLDPWD", ft_getenv(*cmd->envp, "PWD"));
		ft_update_env(cmd->envp, "PWD", path);
		error = chdir(path);
	}
	free(path);
	return (error != 0);
}
Example #2
0
int		ft_change_directory(t_sh *sh, t_cmd *cmd)
{
	struct stat		stats;

	if (cmd->args[1] != NULL && ft_strcmp(cmd->args[1], "~")
			&& ft_strcmp(cmd->args[1], "-"))
	{
		if (stat(cmd->args[1], &stats) != -1)
		{
			if (stats.st_mode & S_IFDIR)
			{
				if (stats.st_mode & S_IRUSR)
				{
					chdir(cmd->args[1]);
					return (ft_update_env(sh, cmd->args[1]));
				}
				else
					return (ft_puterror_nopermission(cmd->args[1]));
			}
			else
				return (ft_puterror_notdir(cmd->args[1]));
		}
		else
			return (ft_puterror_nofile(cmd->args[1]));
	}
	else
		return (ft_special_cd(sh, cmd->args[1]));
}
Example #3
0
static void		cd_path(char ***env, char *tmp)
{
	if (chdir(tmp) == -1)
	{
		ft_putstr("42sh : no such file or directory: ");
		ft_putendl(tmp);
	}
	else
		ft_update_env(env);
}
Example #4
0
int		ft_special_cd(t_sh *sh, char *spec)
{
	int		i;
	int		j;

	i = ft_getenv_id(sh->env, "HOME", 4);
	j = ft_getenv_id(sh->env, "OLDPWD", 6);
	i = check_if_nullvar2(sh, i, j);
	if (spec == NULL || !ft_strcmp(spec, "~"))
	{
		chdir(sh->env[i] + 5);
		ft_update_env(sh, sh->env[i] + 5);
	}
	else
	{
		chdir(sh->env[j] + 7);
		ft_update_env(sh, sh->env[j] + 7);
	}
	return (0);
}
Example #5
0
static void		cd_minus(char ***env, char *tmp)
{
	if ((tmp = search_line(env, "OLDPWD=")) != NULL)
	{
		tmp = ft_strsub(tmp, 7, ft_strlen(tmp) - 7);
		chdir(tmp);
		ft_update_env(env);
		tmp = NULL;
		ft_putendl(getcwd(tmp, 0));
	}
}
Example #6
0
static void		cd_home(char ***env, char *tmp)
{
	int		i;

	i = 0;
	if ((tmp = search_line(env, "HOME=")) != NULL)
	{
		tmp = ft_strsub(tmp, 5, ft_strlen(tmp) - 5);
		chdir(tmp);
		ft_update_env(env);
	}
}