Example #1
0
static void		check_cmd2(char **str, t_env *e)
{
	int			stat;
	pid_t		fat;
	char		*ret;

	ret = NULL;
	if (str[0] && ft_strcmp(str[0], "cd") == 0)
		ft_cd(str[1], e);
	else if (str[0] && ft_strcmp(str[0], "env") == 0)
		print_env(e->env);
	else if (str[0] && ft_strcmp(str[0], "exit") == 0)
		ft_exit(str);
	else if (str[0] && (ret = pathsys(str[0], e)) != NULL)
	{
		fat = fork();
		if (fat != -1)
		{
			if (fat == 0)
				execve(ret, str, e->env);
			else
				waitpid(fat, &stat, 0);
		}
		if (WIFSIGNALED(stat))
			ft_wrong_exit(e->shell, WTERMSIG(stat), ret);
	}
	safe_free(ret);
}
Example #2
0
void				ft_exec_bin(t_env *shell)
{
	int				stat_loc;

	if (ft_set_binpath(shell) == 0)
	{
		tcsetattr(0, TCSANOW, sing_oldterm(NULL));
		shell->cpid = fork();
		if (shell->cpid != -1)
		{
			if (shell->cpid == 0)
				execve(shell->binpath, shell->av, shell->env);
			else
				waitpid(shell->cpid, &stat_loc, 0);
		}
		if (WIFSIGNALED(stat_loc))
			ft_wrong_exit(shell->name_shell,
				WTERMSIG(stat_loc), shell->binpath);
		free(shell->binpath);
		shell->cpid = 0;
		tcsetattr(0, 0, sing_newterm(NULL));
	}
}