Exemple #1
0
int			ft_check_pipe(t_node *node, t_sh *sh)
{
	int		i;
	int		ret;
	t_node	*buffer;
	pid_t	process;

	i = 1;
	process = fork();
	buffer = node;
	if (process)
	{
		while (node->right && R_PRIORITY == 3)
		{
			i++;
			node = node->right;
		}
		exit(ft_pipe(buffer, sh, i));
	}
	else
		waitpid(process, &ret, 0);
	if (WIFEXITED(ret))
		return (WEXITSTATUS(ret));
	return (1);
}
Exemple #2
0
static int		exec_op(char *op, char *cmd, char **env)
{
	char	**tab;
	int		ret;

	if (!(tab = ft_strsplit(cmd, ' ')))
		return (0);
	if (ft_tablen(tab) != 3)
	{
		ft_destroysplit(tab);
		return (ft_error("Format : <cmd|file> <operator> <cmd|file>", NULL));
	}
	if (ft_strequ(op, "|"))
	{
		ft_pipe(env, tab[0], tab[2]);
		ft_destroysplit(tab);
		return (1);
	}
	else
	{
		ret = ft_redir(env, tab[0], tab[1], tab[2]);
		ft_destroysplit(tab);
		return (ret);
	}
}
Exemple #3
0
void	ft_sh2(t_line *tree, char ***newenv)
{
	int		fd[2];

	if (tree->type == 1)
		ft_execcmd(tree->cmd, newenv);
	if (tree->type == 2)
	{
		pipe(fd);
		ft_pipe(tree, newenv, fd);
	}
	if (tree->type == 3)
		ft_right(tree, newenv, 1);
	if (tree->type == 4)
		ft_left(tree, newenv);
	if (tree->type == 5)
		ft_right(tree, newenv, 2);
	if (tree->type == 7 || tree->type == 8)
		ft_logic_opp(tree, newenv);
}
Exemple #4
0
int	choose_case(char ****cmd)
{
	if (ft_strcmp(*(*cmd + 1)[0], "|") == 0)
	{
		if (ft_pipe(*cmd))
			return (-1);
		cmd += 2;
		return (0);
	}
	if (!ft_strcmp(*(*cmd + len_arr_triple(*cmd) - 2)[0], ">")
			|| (*cmd && !ft_strcmp(*(*cmd)[0], "<")) ||
			(*(*cmd + 1) && !ft_strcmp(*(*cmd + 1)[0], "<")))
	{
		if (choose_redir_case(cmd))
			return (-1);
	}
	else
	{
		ft_putstr_fd("42sh: parse error\n", 2);
		return (-1);
	}
	return (1);
}
Exemple #5
0
int			ft_opcode_tree(t_op **tmp, t_data *env, int flag)
{
	int		ret;

	ret = 0;
	(void)env;
	if ((*tmp)->code == 0)
		ret = ft_semicol(tmp, env);
	else if ((*tmp)->code == 1)
		ret = ft_and(tmp, env);
	else if ((*tmp)->code == 2)
		ret = ft_or(tmp, env);
	else if ((*tmp)->code == 3)
		ret = ft_pipe(tmp, env);
	else if ((*tmp)->code == 4)
		ret = ft_ar_lft(tmp, env);
	else if ((*tmp)->code == 5)
		ret = ft_ar_rgt(tmp, env);
	else if ((*tmp)->code == 6)
		ret = ft_db_ar_rgt(tmp, env);
	else if ((*tmp)->code == 7)
		ret = ft_db_ar_lft(tmp, env, flag);
	return (ret);
}