コード例 #1
0
ファイル: ft_cd.c プロジェクト: GuillaumeBadi/ft_sh
int					ft_cd(char **env, char *dir)
{
	char			*pwd;
	int				i;

	if (!dir)
		dir = ft_get_home(env);
	dir = ft_split_custom(dir)[0];
	if (dir[0] == '~')
		dir = ft_strjoin(ft_get_home(env), dir + 1);
	if (dir[0] == '-' && !dir[1])
	{
		dir = env[ft_get_env(env, "OLDPWD")] + 7;
		ft_putendl(dir);
	}
	if (ft_strnequ(dir, "--", 2))
		dir = ft_strjoin(ft_get_home(env), dir + 2);
	i = ft_get_env(env, "OLDPWD");
	env[i] = ft_strjoin("OLDPWD=", ft_pwd());
	if (chdir(dir) != 0)
		return (get_error_cd(dir));
	pwd = ft_pwd();
	i = ft_get_env(env, "PWD");
	env[i] = ft_strjoin("PWD=", pwd);
	return (0);
}
コード例 #2
0
ファイル: ft_builtin.c プロジェクト: Thomas2511/42sh
static int				ft_setenv(char **cmd, t_mlist *mlist)
{
	int					i;
	t_list				*tmp;
	char				*bis;
	char				*join;

	i = 0;
	if ((i = ft_count_tab(cmd)) == 1)
		return (ft_env(cmd, mlist));
	if (i > 3)
		return (!ft_putendl_fd("setenv: Too many arguments.", 2));
	join = ft_strjoin(cmd[1], "=");
	bis = join;
	free(join);
	join = ft_strjoin(bis, cmd[2]);
	free(bis);
	if ((tmp = ft_get_env(cmd[1], mlist->env)) != NULL)
	{
		free(tmp->content);
		tmp->content = join;
		return (1);
	}
	ft_lstpushback(&(mlist->env), join, ft_strlen(join) + 1);
	free(join);
	return (1);
}
コード例 #3
0
ファイル: main.c プロジェクト: Grep-Juub/minishell
int			main(int argc, char **argv, char **env)
{
	t_env		*e;

	UNUSED argc;
	UNUSED argv;
	if ((e = (t_env*)(ft_memalloc(sizeof(t_env)))) == NULL)
		ft_mallerr();
	e->env = env;
	e->path = ft_load_path(ft_get_env("PATH", e->env));
	ft_command_line(e);
	return 0;
}
コード例 #4
0
ファイル: ft_builtin.c プロジェクト: Thomas2511/42sh
static int				ft_unsetenv(char **cmd, t_mlist *mlist)
{
	t_list				*tmp;
	t_list				*cur;

	cur = mlist->env;
	if (ft_count_tab(cmd) == 1)
		return (!ft_putendl_fd("unsetenv: Too few arguments.", 2));
	if ((tmp = ft_get_env(cmd[1], mlist->env)) == NULL)
		return (1);
	while (cur && cur->next && cur->next != tmp)
		cur = cur->next;
	if (mlist->env && tmp == mlist->env)
		mlist->env = mlist->env->next;
	else if (cur && tmp)
		cur->next = tmp->next;
	free(tmp->content);
	free(tmp);
	return (1);
}
コード例 #5
0
ファイル: lst_manip.c プロジェクト: ThomasSan/minishell
void	ft_search_lst(t_env **env, char *s)
{
	t_env	*tmp;
	int		len;

	tmp = *env;
	len = 0;
	while (s[len] != '=' && s[len])
		len++;
	while (tmp)
	{
		if (ft_strncmp(tmp->name, s, ft_strlen(tmp->name)) == 0)
		{
			free(tmp->val);
			tmp->val = ft_strsub(s, (len + 1), (ft_strlen(s) - len));
			return ;
		}
		tmp = tmp->next;
	}
	if (!tmp || !*env)
		*env = ft_get_env(env, s);
}