diff options
| -rw-r--r-- | src/e_externs.c | 46 | 
1 files changed, 18 insertions, 28 deletions
diff --git a/src/e_externs.c b/src/e_externs.c index b184728..68040ab 100644 --- a/src/e_externs.c +++ b/src/e_externs.c @@ -11,17 +11,18 @@  /* ************************************************************************** */  #include <sys/wait.h> -#include <libft.h> -#include <stdlib.h> -#include <string.h> +  #include <fcntl.h> -#include <unistd.h> +#include <errno.h> +#include <libft.h>  #ifdef __linux__  # include <linux/limits.h>  #else  # include <limits.h>  #endif -#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h>  #include "b_export_next.h"  #include "d_define.h" @@ -37,29 +38,19 @@  static void	e_extern_child(const char fullpath[], t_com *ptr, t_msh *msh)  { -	char	buff[7]; -	int		fd; - -	if ((fd = open(fullpath, O_RDONLY)) != -1) -	{ -		if (read(fd, buff, 7) != -1) -			if (ft_strncmp(buff, "\177ELF\002\001\001", 7) != 0 -				&& ft_strncmp(buff, "#!", 2) != 0) -			{ -				close(fd); -				e_extern_read_script(fullpath, ptr, msh, FALSE); -				return ; -			} -		close(fd); -	}  	if (execve(fullpath, ptr->argv, msh->envp) == -1)  	{ -		f_exec(fullpath, ptr->bin); -		u_eof_fd(msh->fd); -		s_com_destroy(&msh->com); -		s_line_clear(&msh->curr); -		s_destroy(msh); -		exit(errno); +		if (errno != ENOEXEC) +		{ +			f_exec(fullpath, ptr->bin); +			u_eof_fd(msh->fd); +			s_com_destroy(&msh->com); +			s_line_clear(&msh->curr); +			s_destroy(msh); +			exit(errno); +			return ; +		} +		e_extern_read_script(fullpath, ptr, msh, FALSE);  	}  } @@ -123,8 +114,7 @@ void		e_extern(t_com *ptr, t_msh *msh)  	unsigned char	fp_ret;  	fullpath[0] = C_NUL; -	if (ptr->bin != NULL && (ft_ischarset("./", ptr->bin[0]) == TRUE -		|| ft_strchr(ptr->bin, '/') != NULL)) +	if (ptr->bin != NULL && ft_strchr(ptr->bin, '/') != NULL)  	{  		ft_strlcpy(fullpath, ptr->bin, PATH_MAX);  		e_exec_path(fullpath, ptr, 0, msh);  | 
