69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* ************************************************************************** */
 | |
| /*                                                                            */
 | |
| /*                                                        :::      ::::::::   */
 | |
| /*   cmd.c                                              :+:      :+:    :+:   */
 | |
| /*                                                    +:+ +:+         +:+     */
 | |
| /*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | |
| /*                                                +#+#+#+#+#+   +#+           */
 | |
| /*   Created: 2023/02/15 14:18:21 by cchauvet          #+#    #+#             */
 | |
| /*   Updated: 2023/04/07 15:17:21 by alouis-j         ###   ########.fr       */
 | |
| /*                                                                            */
 | |
| /* ************************************************************************** */
 | |
| 
 | |
| #include "cmd.h"
 | |
| #include "cmd_private.h"
 | |
| 
 | |
| void	ft_cmddel(void *ptr)
 | |
| {
 | |
| 	t_cmd	*content;
 | |
| 
 | |
| 	content = (t_cmd *) ptr;
 | |
| 	if (content->args != NULL)
 | |
| 		ft_freer_tab_ultimate(1, content->args);
 | |
| 	if (content->own_cmd == false && content->executable != NULL)
 | |
| 		free(content->executable);
 | |
| 	if (content->fd_in[0] > 2)
 | |
| 		close(content->fd_in[0]);
 | |
| 	if (content->fd_out[0] > 2)
 | |
| 		close(content->fd_out[0]);
 | |
| 	if (content->fd_in[1] > 2)
 | |
| 		close(content->fd_in[1]);
 | |
| 	if (content->fd_out[1] > 2)
 | |
| 		close(content->fd_out[1]);
 | |
| 	free(content);
 | |
| }
 | |
| 
 | |
| void	ft_cmdcloser(void *ptr)
 | |
| {
 | |
| 	t_cmd	*cmd;
 | |
| 
 | |
| 	cmd = ptr;
 | |
| 	ft_closer(cmd->fd_in);
 | |
| 	ft_closer(cmd->fd_out);
 | |
| }
 | |
| 
 | |
| void	ft_cmdwaiter(void *ptr)
 | |
| {
 | |
| 	t_cmd	*cmd;
 | |
| 	int		exit_status;
 | |
| 
 | |
| 	cmd = ptr;
 | |
| 	if (cmd->executable != NULL && cmd->own_cmd == 0
 | |
| 		&& cmd->pid != -1 && cmd->fd_in[0] != -2 && cmd->fd_out[0] != -2)
 | |
| 	{
 | |
| 		waitpid(cmd->pid, &exit_status, 0);
 | |
| 		if (WIFSIGNALED(exit_status))
 | |
| 		{
 | |
| 			if (exit_status == 131)
 | |
| 			{
 | |
| 				ft_printf("Quit (core dumped)\n");
 | |
| 				*ft_get_exit_code() = 131;
 | |
| 			}
 | |
| 			else
 | |
| 				*ft_get_exit_code() = 130;
 | |
| 		}
 | |
| 		else
 | |
| 			*ft_get_exit_code() = WEXITSTATUS(exit_status);
 | |
| 	}
 | |
| }
 |