Example #1
0
int			ft_env_manage(t_env *env, char **var)
{
	char	**arg;

	if (var[1] == NULL)
	{
		ft_display_lst(env, 0);
		return (0);
	}
	else
	{
		if (var[1][0] == '-' && var[1][1] == 'i')
		{
			arg = ft_strsplit(var[2], '=');
			ft_setenv_ignore(env, arg);
		}
		else
		{
			arg = ft_strsplit(var[1], '=');
			ft_setenv_local(env, arg);
		}
		ft_free_arg(arg);
	}
	return (0);
}
Example #2
0
static char		*ft_access(char *str, char *path)
{
	char	**arg;
	int		i;
	char	*exec;

	if (ft_goodpath(str))
		return ((access(str, F_OK | X_OK) == -1) ? NULL : str);
	arg = ft_str_to_wordtab(path, ':', ':');
	i = -1;
	while (arg[++i] != NULL)
	{
		exec = ft_pathfile(arg[i], str);
		if (access(exec, F_OK | X_OK) != -1)
		{
			ft_free_arg(arg);
			return (exec);
		}
		free(exec);
	}
	return (NULL);
}
Example #3
0
int				ft_exec(t_env *env, char **exec_opt, char *path)
{
	pid_t	pid;
	int		statut;
	char	**env_local;
	char	*exec;

	env_local = ft_conv_lst(env);
	pid = fork();
	if (pid == -1)
		return (ft_error("Impossible de chercher le fils dans fork\n", "fork"));
	else if (pid == 0)
	{
		if ((exec = ft_access(exec_opt[0], path)) == NULL ||
				execve(exec, exec_opt, env_local) == -1)
			ft_notfound(exec);
	}
	else
		wait(&statut);
	ft_free_arg(env_local);
	return (0);
}
Example #4
0
static void	lauch_execute_backquote(t_cmd *cmd,
	t_env *env, char *newcmd)
{
	t_list		*arg;
	t_env		c_env;
	t_cmd		c_cmd;
	t_dir		c_dir;

	arg = NULL;
	init_copy_env(&c_env, &c_cmd, &c_dir);
	c_cmd.raw = ft_strdup(newcmd);
	c_cmd.split = NULL;
	c_env.var = env_lst_copy(env);
	c_env.nb = env->nb;
	c_cmd.paths = ft_tab_dup(cmd->paths);
	c_cmd.env = env_list_to_array(c_env.var, c_env.nb);
	arg = ft_parser(c_cmd.raw);
	ft_open_close();
	ft_launcher(&arg, &c_cmd, &c_env, &c_dir);
	if (arg)
		ft_free_arg(&arg);
	ft_free_c_env(&c_env, &c_cmd, &c_dir);
	ft_open_close();
}