示例#1
0
文件: ft_minishell1.c 项目: jfaub/42
int			main(int ac, char **av, char **env)
{
	char		*line;
	char		**env_copy;

	ac = 0;
	av[0] = "allez";
	env_copy = ft_cpy_char2(env);
	ft_putstr("jaubert$> ");
	while (get_next_line(0, &line) && ft_strcmp(line, "exit") != 0)
	{
		if (ft_strcmp(line, "pwd") == 0)
			ft_pwd();
		else if (ft_strncmp(line, "cd", 2) == 0)
			ft_cd(line);
		else if (ft_strncmp(line, "env", 3) == 0)
			ft_env(line, env_copy);
		else if (ft_strncmp(line, "setenv", 6) == 0)
			env_copy = ft_setenv(line, env_copy);
		else if (line)
			ft_launch_bin(line, env_copy);
		ft_putstr("jaubert$> ");
		free(line);
	}
	return (0);
}
示例#2
0
文件: build.c 项目: zhasni/SH1
int		ft_setenv(char *line, t_env *env)
{
	char	**tmp;
	int		ret;
	int		len;

	ret = 0;
	tmp = ft_strsplit(line, ' ');
	if (!tmp[1])
	{
		ft_env(env, tmp);
		return (0);
	}
	len = ft_tablen(tmp);
	if (!tmp[2])
		tmp[2] = "";
	ret = ft_check_line_env(env, tmp[1]);
	if (ft_strcmp(tmp[1], "PATH") == 0)
		ft_error_setenv(2);
	else if (ret > 0 && len <= 3)
		ft_replace_line_env(env, tmp[1], tmp[2]);
	else if (ret == 0 && len <= 3)
		ft_add_line(env, tmp[1], tmp[2]);
	else
		ft_error_setenv(1);
	return (0);
}
示例#3
0
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);
}
示例#4
0
文件: main.c 项目: bibop-qu/SH1
void	ft_loop(char **cmd, t_env **e, char **tab_e)
{
	if (!ft_strcmp(cmd[0], "echo"))
		ft_echo(cmd, *e);
	else if (!ft_strcmp(cmd[0], "exit"))
	{
		free_list(*e);
		exit(0);
	}
	else if (!ft_strcmp(cmd[0], "env"))
	{
		tab_e = listtotab(*e);
		ft_env(*e, cmd, tab_e);
	}
	else if (!ft_strcmp(cmd[0], "setenv"))
		ft_setenv(e, cmd);
	else if (!ft_strcmp(cmd[0], "unsetenv"))
		ft_unsetenv(e, cmd);
	else if (!ft_strcmp(cmd[0], "cd") && *e)
		ft_cd(*e, cmd);
	else
	{
		tab_e = listtotab(*e);
		do_fork(cmd, *e, tab_e);
	}
	free_tab(cmd);
}
示例#5
0
文件: built_env.c 项目: sbenning42/42
int			built_env(t_sh *sh, t_tree *root)
{
	int		ac;
	int		ret;

	ac = 0;
	while (root->cmd.arg[ac])
		ac++;
	ret = ft_env(ac, root->cmd.arg, sh->bin);
	if ((root->cmd.bitset & EX_OUTPIPE) == EX_OUTPIPE\
			|| (root->cmd.bitset & EX_OUTREDIR) == EX_OUTREDIR)
		exit((ret ? EXIT_FAILURE : EXIT_SUCCESS));
	return (ret);
	(void)sh;
}
示例#6
0
文件: builtins2.c 项目: ajulien42/sh1
void	ft_homeenv2(t_s *s)
{
	int		i;
	int		nbenv;

	nbenv = 0;
	i = 1;
	while (s->in[i])
	{
		if (checkegalenv(s->in[i]) == 0)
			nbenv++;
		else
			ft_env(s, nbenv);
		i++;
	}
}
示例#7
0
文件: perform_cmd.c 项目: Derzouli/42
int			ft_perform_cmd(t_tree *t, t_env *e)
{
	int		value;

	value = 0;
	if (!ft_strcmp(t->p->tok, "exit"))
		value = ft_exit(t->p);
	else if (!ft_strcmp(t->p->tok, "echo"))
		ft_echo(t->p);
	else if (!(ft_strcmp(t->p->tok, "cd")))
		value = ft_cd(t->p, e);
	else if (!(ft_strcmp(t->p->tok, "env")))
		value = ft_env(t->p, e);
	else if (!(ft_strcmp(t->p->tok, "unsetenv")))
		value = ft_unsetenv(t->p, &(e->env));
	else if (!(ft_strcmp(t->p->tok, "setenv")))
		value = ft_setenv(t->p, &(e->env));
	else
		value = ft_perform_exe(t->p, e);
	return (value);
}
示例#8
0
int implemented_function(char **cmd)
{
	if (!cmd)
		return (1);
	if (ft_strcmp(cmd[0], "exit") == 0)
	{
		free_arr(&cmd);
		return (-1);
	}
	else if (ft_strcmp(cmd[0], "env") == 0)
		ft_env(cmd);
	else if (ft_strcmp(cmd[0], "cd") == 0)
		ft_cd(cmd);
	else if (ft_strcmp(cmd[0], "setenv") == 0)
		ENVP = ft_setenv(cmd);
	else if (ft_strcmp(cmd[0], "unsetenv") == 0)
		ENVP = ft_unsetenv(cmd);
	else
		return (0);
	return (1);
}
示例#9
0
int					check_bultins(char **av, t_env *env)
{
	if (!ft_strcmp(av[0], "exit"))
		ft_exit(av, env);
	else if (!ft_strcmp(av[0], "cd"))
		ft_cd(av, env);
	else if (!ft_strcmp(av[0], "setenv"))
		ft_setenv(av, env);
	else if (!ft_strcmp(av[0], "unsetenv"))
		ft_unsetenv(av, env);
	else if (!ft_strcmp(av[0], "env"))
	{
		ft_env(av, env->environ);
		resumed_terminal();
	}
	else if (!ft_strcmp(av[0], "echo"))
		ft_echo(av, env->environ);
	else
		return (0);
	free_double_array(av);
	return (1);
}