fix quote je pense ca marche
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								.heredoc.c.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.heredoc.c.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								.infile.c.swp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.infile.c.swp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								.main.c.swp
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.main.c.swp
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | ||||
| UTILS_SRC = utils/ft_is_in_quote.c utils/ft_strncpy.c utils/ft_strreplace.c utils/ft_strnchr.c utils/ft_getstr.c utils/ft_printn.c | ||||
| SRCS = ${UTILS_SRC} main.c file.c infile.c outfile.c heredoc.c syntatics.c ft_split_quoted.c env.c execution.c | ||||
| UTILS_SRC = utils/ft_is_in_quote.c utils/ft_strncpy.c utils/ft_strreplace.c utils/ft_strnchr.c utils/ft_split_quoted.c utils/ft_strshift.c utils/ft_quote_remover.c | ||||
| SRCS = ${UTILS_SRC} main.c file.c infile.c outfile.c heredoc.c syntatics.c cmd.c cmds.c env.c execution.c spacer.c | ||||
|  | ||||
| OBJS = ${SRCS:.c=.o} | ||||
|  | ||||
|  | ||||
							
								
								
									
										44
									
								
								cmd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								cmd.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| /* ************************************************************************** */ | ||||
| /*                                                                            */ | ||||
| /*                                                        :::      ::::::::   */ | ||||
| /*   cmd.c                                              :+:      :+:    :+:   */ | ||||
| /*                                                    +:+ +:+         +:+     */ | ||||
| /*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/02/15 14:18:21 by cchauvet          #+#    #+#             */ | ||||
| /*   Updated: 2023/02/15 14:18:38 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| #include "minishell.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->executable != NULL) | ||||
| 		free(content->executable); | ||||
| 	free(content); | ||||
| } | ||||
|  | ||||
| int	ft_cmd_filler(t_list *element, char **args) | ||||
| { | ||||
| 	t_cmd	*content; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	if (args == NULL) | ||||
| 		return (1); | ||||
| 	content = (t_cmd *)element->content; | ||||
| 	i = 0; | ||||
| 	while (args[i] != NULL) | ||||
| 	{ | ||||
| 		ft_quote_remover(args[i]); | ||||
| 		i++; | ||||
| 	} | ||||
| 	content->args = args; | ||||
| 	content->executable = args[0]; | ||||
| 	return (0); | ||||
| } | ||||
							
								
								
									
										121
									
								
								cmds.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								cmds.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,121 @@ | ||||
| /* ************************************************************************** */ | ||||
| /*                                                                            */ | ||||
| /*                                                        :::      ::::::::   */ | ||||
| /*   cmds.c                                             :+:      :+:    :+:   */ | ||||
| /*                                                    +:+ +:+         +:+     */ | ||||
| /*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/02/15 14:17:26 by cchauvet          #+#    #+#             */ | ||||
| /*   Updated: 2023/02/15 17:53:59 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| #include "minishell.h" | ||||
|  | ||||
| int	ft_cmds_init(t_list **cmds, size_t len) | ||||
| { | ||||
| 	t_cmd	*content; | ||||
| 	t_list	*current; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	*cmds = malloc(sizeof(t_list)); | ||||
| 	current = *cmds; | ||||
| 	i = 0; | ||||
| 	while (i < len) | ||||
| 	{ | ||||
| 		content = malloc(sizeof(t_cmd)); | ||||
| 		if (content == NULL) | ||||
| 		{ | ||||
| 			ft_lstclear(cmds, ft_cmddel); | ||||
| 			return (1); | ||||
| 		} | ||||
| 		content->args = NULL; | ||||
| 		content->executable = NULL; | ||||
| 		content->fd_in = -1; | ||||
| 		content->fd_out = -1; | ||||
| 		current->content = content; | ||||
| 		if (!((i + 1) < len)) | ||||
| 		{ | ||||
| 			current->next = NULL; | ||||
| 			return (0); | ||||
| 		} | ||||
| 		current->next = malloc(sizeof(t_list)); | ||||
| 		if (current->next == NULL) | ||||
| 			ft_lstclear(cmds, ft_cmddel); | ||||
| 		current = current->next; | ||||
| 		i++; | ||||
| 	} | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| int	ft_cmds_prep(t_list **cmds, const char *line, int infile, int outfile) | ||||
| { | ||||
| 	size_t	len; | ||||
| 	t_cmd	*cmd; | ||||
| 	t_list	*current; | ||||
|  | ||||
| 	len = ft_seglen_quoted(line, '|'); | ||||
| 	if (len == 0) | ||||
| 		return (0); | ||||
| 	if (ft_cmds_init(cmds, ft_seglen_quoted(line, '|'))) | ||||
| 	{ | ||||
| 		free(cmds); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	cmd = (t_cmd *)(*cmds)->content; | ||||
| 	cmd->fd_in = infile; | ||||
| 	current = *cmds; | ||||
| 	while (current->next != NULL) | ||||
| 		current = current->next; | ||||
| 	cmd = (t_cmd *) current->content; | ||||
| 	cmd->fd_out = outfile; | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| int	ft_cmds_fill(t_list **cmds, const char *line) | ||||
| { | ||||
| 	char	**tab; | ||||
| 	char	**args; | ||||
| 	t_list	*current; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	tab = ft_split_quoted(line, '|'); | ||||
| 	if (tab == NULL) | ||||
| 		return (1); | ||||
| 	i = 0; | ||||
| 	current = *cmds; | ||||
| 	while (tab[i] != NULL) | ||||
| 	{ | ||||
| 		args = ft_split_quoted(tab[i], ' '); | ||||
| 		if (ft_cmd_filler(current, args) == 1) | ||||
| 		{ | ||||
| 			ft_lstclear(cmds, ft_cmddel); | ||||
| 			ft_freer_tab_ultimate(2, args, tab); | ||||
| 			return (1); | ||||
| 		} | ||||
| 		current = current->next; | ||||
| 		i++; | ||||
| 	} | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| t_list	**ft_parse_cmds(char *line) | ||||
| { | ||||
| 	int		infile; | ||||
| 	int		outfile; | ||||
| 	t_list	**cmds; | ||||
|  | ||||
| 	cmds = malloc(sizeof(t_list *)); | ||||
| 	outfile = ft_outfile(line); | ||||
| 	infile = ft_infile(line); | ||||
| 	if (infile == -2) | ||||
| 		return (NULL); | ||||
| 	if (ft_syntatic_verif(line) == 1) | ||||
| 		return (NULL); | ||||
| 	if (ft_cmds_prep(cmds, line, infile, outfile) == 1) | ||||
| 		return (NULL); | ||||
| 	if (ft_cmds_fill(cmds, line) == 1) | ||||
| 		return (NULL); | ||||
| 	return (cmds); | ||||
| } | ||||
							
								
								
									
										4
									
								
								env.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								env.c
									
									
									
									
									
								
							| @ -6,7 +6,7 @@ | ||||
| /*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/02/02 14:39:56 by erey-bet          #+#    #+#             */ | ||||
| /*   Updated: 2023/02/14 15:21:28 by cchauvet         ###   ########.fr       */ | ||||
| /*   Updated: 2023/02/15 19:58:19 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| @ -113,7 +113,7 @@ char	*get_value_by_key(char *key, t_list **head) | ||||
| 	return (NULL); | ||||
| } | ||||
|  | ||||
| int		set_value_by_key(t_list **env, char *key, char *value) | ||||
| int		set_value_key(t_list **env, char *key, char *value) | ||||
| { | ||||
| 	t_list	*current; | ||||
| 	char	*temp; | ||||
|  | ||||
| @ -26,7 +26,14 @@ static char	*ft_get_executable_path(char *executable_name, char **env) | ||||
|  | ||||
| 	path = NULL; | ||||
| 	if (executable_name[0] == '.' || executable_name[0] == '/') | ||||
| 	{ | ||||
| 		path = ft_strdup(executable_name); | ||||
| 		if (path == NULL) | ||||
| 		{ | ||||
| 			ft_eprintf("minishell: malloc failed\n"); | ||||
| 			return (NULL); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		tab = ft_split(ft_get_variable(env, "PATH"), ':'); | ||||
| @ -64,6 +71,8 @@ static int	ft_excutor(t_cmd *cmd, char **env) | ||||
| 	int		pid; | ||||
| 	int		return_value; | ||||
|  | ||||
| 	if (cmd->fd_in == -1 || cmd->fd_out == -1) | ||||
| 		return (1); | ||||
| 	pid = fork(); | ||||
| 	if (pid == -1) | ||||
| 		return (1); | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								execution.o
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								execution.o
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										67
									
								
								file.c
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								file.c
									
									
									
									
									
								
							| @ -1,4 +1,17 @@ | ||||
| /* ************************************************************************** */ | ||||
| /*                                                                            */ | ||||
| /*                                                        :::      ::::::::   */ | ||||
| /*   file.c                                             :+:      :+:    :+:   */ | ||||
| /*                                                    +:+ +:+         +:+     */ | ||||
| /*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/02/15 17:36:11 by cchauvet          #+#    #+#             */ | ||||
| /*   Updated: 2023/02/15 17:41:13 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| #include "minishell.h" | ||||
| #include <unistd.h> | ||||
|  | ||||
| int	ft_file_is_readable(const char *path) | ||||
| { | ||||
| @ -9,58 +22,58 @@ int	ft_file_is_readable(const char *path) | ||||
| 	if (fd == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: No such file or directory\n", path); | ||||
| 		return (0); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	readable = read(fd, "", 0); | ||||
| 	if (readable == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: Permission denied\n", path); | ||||
| 		return (0); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	close(fd); | ||||
| 	return (1); | ||||
| 	return (fd); | ||||
| } | ||||
|  | ||||
| int	ft_file_is_writeable(const char *path) | ||||
| int	ft_file_is_writable(const char *path) | ||||
| { | ||||
| 	int	writeable; | ||||
| 	int	fd; | ||||
|  | ||||
| 	fd = open(path, O_WRONLY | O_CREAT, 0644); | ||||
| 	fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); | ||||
| 	if (fd == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: Permission denied\n", path); | ||||
| 		return (0); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	writeable = write(fd, "", 0); | ||||
| 	if (writeable == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: Permission denied\n", path); | ||||
| 		return (0); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	close(fd); | ||||
| 	return (1); | ||||
| 	return (fd); | ||||
| } | ||||
|  | ||||
| char	*ft_get_file_path(const char *infile) | ||||
| int	ft_file_is_appendable(const char *path) | ||||
| { | ||||
| 	size_t	i; | ||||
| 	size_t	n; | ||||
| 	int	writeable; | ||||
| 	int	fd; | ||||
|  | ||||
| 	n = 1; | ||||
| 	while (infile[-n] == infile[-1]) | ||||
| 		n++; | ||||
| 	i = 0; | ||||
| 	while (infile[i] == ' ') | ||||
| 		i++; | ||||
| 	if (infile[i] == '\0' || infile[i] == '>' || infile[i] == '<') | ||||
| 	fd = open(path, O_WRONLY | O_CREAT | O_APPEND, 0644); | ||||
| 	if (fd == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: syntax error near "); | ||||
| 		if ((infile[0] == '<' && n > 3) || (infile[0] == '>' && n > 2)) | ||||
| 			ft_eprintf("unexpected token `%c`\n", infile[i - 1]); | ||||
| 		else | ||||
| 			ft_eprintf("unexpected token `newline`\n"); | ||||
| 		return (NULL); | ||||
| 		ft_eprintf("minishell: %s: Permission denied\n", path); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	return (ft_getstr(infile, i + 1)); | ||||
| 	writeable = write(fd, "", 0); | ||||
| 	if (writeable == -1) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: Permission denied\n", path); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	return (fd); | ||||
| } | ||||
|  | ||||
| int	ft_file_is_executable(const char *path) | ||||
| { | ||||
| 	return (access(path, X_OK) == 0); | ||||
| } | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										128
									
								
								infile.c
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								infile.c
									
									
									
									
									
								
							| @ -1,76 +1,95 @@ | ||||
| #include "minishell.h" | ||||
| /* ************************************************************************** */ | ||||
| /*                                                                            */ | ||||
| /*                                                        :::      ::::::::   */ | ||||
| /*   infile.c                                           :+:      :+:    :+:   */ | ||||
| /*                                                    +:+ +:+         +:+     */ | ||||
| /*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */ | ||||
| /*                                                +#+#+#+#+#+   +#+           */ | ||||
| /*   Created: 2023/02/15 17:52:10 by cchauvet          #+#    #+#             */ | ||||
| /*   Updated: 2023/02/15 20:47:19 by cchauvet         ###   ########.fr       */ | ||||
| /*                                                                            */ | ||||
| /* ************************************************************************** */ | ||||
|  | ||||
| static int	ft_get_infile(char *line) | ||||
| #include "libftx/libftx.h" | ||||
| #include "minishell.h" | ||||
| #include "utils/utils.h" | ||||
|  | ||||
| static int	ft_infile_is_valid(const char *line) | ||||
| { | ||||
| 	char	**tab; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	tab = ft_split_quoted(line, ' '); | ||||
| 	if (tab == NULL) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: malloc failed\n"); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	i = 0; | ||||
| 	while (tab[i + 1] != NULL) | ||||
| 		i++; | ||||
| 	if (tab[i][0] == '<') | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: %s: must be followed by an infile\n", tab[i]); | ||||
| 		return (0); | ||||
| 	} | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (1); | ||||
| } | ||||
|  | ||||
| static int	ft_get_infile(const char *line) | ||||
| { | ||||
| 	size_t	i; | ||||
| 	int		fd; | ||||
| 	char	*path; | ||||
| 	char	**tab; | ||||
|  | ||||
| 	tab = ft_split_quoted(line, ' '); | ||||
| 	if (tab == NULL) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: malloc failed\n"); | ||||
| 		return (-2); | ||||
| 	} | ||||
| 	fd = 0; | ||||
| 	i = 0; | ||||
| 	while (line[i] != '\0') | ||||
| 	while (tab[i + 1] != NULL) | ||||
| 	{ | ||||
| 		if (line[i] == '<' && ft_is_in_quote(line, i) == 0) | ||||
| 		{ | ||||
| 			i++; | ||||
| 			if (fd != 0) | ||||
| 				close(fd); | ||||
| 			if (line[i] == '<') | ||||
| 			{ | ||||
| 				i++; | ||||
| 				path = ft_get_file_path(line + i); | ||||
| 				if (path == NULL) | ||||
| 					return (-1); | ||||
| 				fd = ft_heredoc(path); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				path = ft_get_file_path(line + i); | ||||
| 				if (path == NULL) | ||||
| 					return (-1); | ||||
| 				if (ft_file_is_readable(path) == 0) | ||||
| 				{					 | ||||
| 					free(path); | ||||
| 					return (-1); | ||||
| 				} | ||||
| 				fd = open(path, O_RDONLY); | ||||
| 			} | ||||
| 			free(path); | ||||
| 		} | ||||
| 		if (ft_strcmp("<", tab[i]) == 0) | ||||
| 			fd = ft_file_is_readable(ft_quote_remover(tab[i + 1])); | ||||
| 		else if (ft_strcmp("<<", tab[i]) == 0) | ||||
| 			fd = ft_heredoc(tab[i + 1]); | ||||
| 		i++; | ||||
| 	} | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (fd); | ||||
| } | ||||
|  | ||||
| static int	ft_remove_infile(char *line) | ||||
| { | ||||
| 	size_t	i; | ||||
| 	int		separator; | ||||
| 	size_t	y; | ||||
| 	char	**tab; | ||||
|  | ||||
| 	tab = ft_split_quoted(line, ' '); | ||||
| 	if (tab == NULL) | ||||
| 	{ | ||||
| 		ft_eprintf("minishell: malloc failed\n"); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	i = 0; | ||||
| 	while (line[i] != '\0') | ||||
| 	y = 0; | ||||
| 	while (tab[i] != NULL) | ||||
| 	{ | ||||
| 		if (line[i] == '<' && ft_is_in_quote(line, i) == 0) | ||||
| 		if (tab[i][0] == '<') | ||||
| 		{ | ||||
| 			while (line[i] == '<') | ||||
| 				line[i++] = ' '; | ||||
| 			while (line[i] == ' ') | ||||
| 			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1)); | ||||
| 			i++; | ||||
| 			separator = ft_is_in_quote(line, i); | ||||
| 			if (separator == 0) | ||||
| 				separator = ' '; | ||||
| 			else if (separator == 1) | ||||
| 				separator = '\''; | ||||
| 			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1)); | ||||
| 		} | ||||
| 		else | ||||
| 				separator = '\"'; | ||||
| 			while (line[i] != separator && line[i] != '\0') | ||||
| 				line[i++] = ' '; | ||||
| 			if (line[i] != '\0' | ||||
| 				&& (separator == '\'' || separator == '\"')) | ||||
| 				line[i++] = ' '; | ||||
| 		} | ||||
| 			y = y + ft_strlen(tab[i]); | ||||
| 		i++; | ||||
| 	} | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| @ -78,12 +97,11 @@ int	ft_infile(char *line) | ||||
| { | ||||
| 	int	fd; | ||||
|  | ||||
| 	if (ft_infile_is_valid(line) == 0) | ||||
| 		return (-2); | ||||
| 	fd = ft_get_infile(line); | ||||
| 	if (ft_remove_infile(line)) | ||||
| 	{ | ||||
| 		if (fd > 0) | ||||
| 			close(fd); | ||||
| 		return (-1); | ||||
| 	} | ||||
| 	if (fd == -2) | ||||
| 		return (-2); | ||||
| 	ft_remove_infile(line); | ||||
| 	return (fd); | ||||
| } | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								libftx/libftx.a
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								libftx/libftx.a
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										211
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										211
									
								
								main.c
									
									
									
									
									
								
							| @ -1,210 +1,53 @@ | ||||
| #include "libftx/libftx.h" | ||||
| #include "minishell.h" | ||||
| #include <fcntl.h> | ||||
|  | ||||
| void	ft_lstdel(void *ptr) | ||||
| { | ||||
| 	t_cmd	*content; | ||||
|  | ||||
| 	content = (t_cmd *) ptr; | ||||
| 	if (content->args != NULL) | ||||
| 		ft_freer_tab_ultimate(1, content->args); | ||||
| 	if (content->executable != NULL) | ||||
| 		free(content->executable); | ||||
| 	free(content); | ||||
| } | ||||
|  | ||||
| int	ft_cmds_init(t_list **cmds, size_t len) | ||||
| { | ||||
| 	t_cmd	*content; | ||||
| 	t_list	*current; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	*cmds = malloc(sizeof(t_list)); | ||||
| 	current = *cmds; | ||||
| 	i = 0; | ||||
| 	while (i < len) | ||||
| 	{ | ||||
| 		content = malloc(sizeof(t_cmd)); | ||||
| 		if (content == NULL) | ||||
| 		{ | ||||
| 			ft_lstclear(cmds, ft_lstdel); | ||||
| 			return (1); | ||||
| 		} | ||||
| 		content->args = NULL; | ||||
| 		content->executable = NULL; | ||||
| 		content->fd_in = -1; | ||||
| 		content->fd_out = -1; | ||||
| 		current->content = content; | ||||
| 		if (!((i + 1) < len)) | ||||
| 		{ | ||||
| 			current->next = NULL; | ||||
| 			return (0); | ||||
| 		} | ||||
| 		current->next = malloc(sizeof(t_list)); | ||||
| 		if (current->next == NULL) | ||||
| 			ft_lstclear(cmds, ft_lstdel); | ||||
| 		current = current->next; | ||||
| 		i++; | ||||
| 	} | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| int	ft_cmds_prep(t_list **cmds, const char *line, int infile, int outfile) | ||||
| { | ||||
| 	size_t	len; | ||||
| 	t_cmd	*cmd; | ||||
| 	t_list	*current; | ||||
|  | ||||
| 	len = ft_seglen_quoted(line, '|'); | ||||
| 	if (len == 0) | ||||
| 		return (0); | ||||
| 	if (ft_cmds_init(cmds, ft_seglen_quoted(line, '|'))) | ||||
| 	{ | ||||
| 		free(cmds); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	cmd = (t_cmd *)(*cmds)->content; | ||||
| 	cmd->fd_in = infile; | ||||
| 	current = *cmds; | ||||
| 	while (current->next != NULL) | ||||
| 		current = current->next; | ||||
| 	cmd = (t_cmd *) current->content; | ||||
| 	cmd->fd_out = outfile; | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| void	ft_strshift(char *str, int shift) | ||||
| { | ||||
| 	size_t	i; | ||||
|  | ||||
| 	if (shift > 0) | ||||
| 		return ; | ||||
| 	i = 0; | ||||
| 	while (str[i - shift] != '\0') | ||||
| 	{ | ||||
| 		str[i] = str[i - shift]; | ||||
| 		i++; | ||||
| 	} | ||||
| 	str[i + shift] = '\0'; | ||||
| } | ||||
|  | ||||
| void	ft_quote_remover(char *str) | ||||
| { | ||||
| 	size_t	i; | ||||
| 	ssize_t	start; | ||||
| 	ssize_t	stop; | ||||
|  | ||||
| 	start = -1; | ||||
| 	i = 0; | ||||
| 	while (str[i] != '\0') | ||||
| 	{ | ||||
| 		if ((str[i] == '\"' || str[i] == '\'')) | ||||
| 		{ | ||||
| 			if (start == -1) | ||||
| 				start = i; | ||||
| 			else if (str[i] == str[start]) | ||||
| 			{ | ||||
| 				stop = i; | ||||
| 				break ; | ||||
| 			} | ||||
| 		} | ||||
| 		i++; | ||||
| 	} | ||||
| 	if (start != -1) | ||||
| 	{ | ||||
| 		ft_strshift(str, -1); | ||||
| 		str[stop] = '\0'; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| int	ft_cmd_filler(t_list *element, char **args) | ||||
| { | ||||
| 	t_cmd	*content; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	if (args == NULL) | ||||
| 		return (1); | ||||
| 	content = (t_cmd *)element->content; | ||||
| 	i = 0; | ||||
| 	while (args[i] != NULL) | ||||
| 	{ | ||||
| 		ft_quote_remover(args[i]); | ||||
| 		i++; | ||||
| 	} | ||||
| 	content->args = args; | ||||
| 	//pas free:10 | ||||
| 	content->executable = args[0]; | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| int	ft_cmds_fill(t_list **cmds, const char *line) | ||||
| { | ||||
| 	char	**tab; | ||||
| 	char	**args; | ||||
| 	t_list	*current; | ||||
| 	size_t	i; | ||||
|  | ||||
| 	tab = ft_split_quoted(line, '|'); | ||||
| 	if (tab == NULL) | ||||
| 		return (1); | ||||
| 	i = 0; | ||||
| 	current = *cmds; | ||||
| 	while (tab[i] != NULL) | ||||
| 	{ | ||||
| 		args = ft_split_quoted(tab[i], ' '); | ||||
| 		if (ft_cmd_filler(current, args) == 1) | ||||
| 		{ | ||||
| 			ft_lstclear(cmds, ft_lstdel); | ||||
| 			ft_freer_tab_ultimate(2, args, tab); | ||||
| 			return (1); | ||||
| 		} | ||||
| 		current = current->next; | ||||
| 		i++; | ||||
| 	} | ||||
| 	ft_freer_tab_ultimate(1, tab); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
| t_list	**ft_parse_cmds(char *line) | ||||
| { | ||||
| 	int		infile; | ||||
| 	int		outfile; | ||||
| 	t_list	**cmds; | ||||
|  | ||||
| 	cmds = malloc(sizeof(t_list *)); | ||||
| 	outfile = ft_outfile(line); | ||||
| 	infile = ft_infile(line); | ||||
| 	if (ft_syntatic_verif(line) == 1) | ||||
| 		return (NULL); | ||||
| 	if (ft_cmds_prep(cmds, line, infile, outfile) == 1) | ||||
| 		return (NULL); | ||||
| 	if (ft_cmds_fill(cmds, line) == 1) | ||||
| 		return (NULL); | ||||
| 	return (cmds); | ||||
| } | ||||
| /* int	main(int ac, char **av) */ | ||||
| /* { */ | ||||
| /* 	char	*line; */ | ||||
| /* 	int		fd; */ | ||||
| /*  */ | ||||
| /* 	if (ac != 2) */ | ||||
| /* 		return (1); */ | ||||
| /* 	fd = open(av[1], O_RDONLY); */ | ||||
| /* 	line = get_next_line(fd); */ | ||||
| /* 	while (line != NULL) */ | ||||
| /* 	{ */ | ||||
| /* 		ft_printf(line); */ | ||||
| /* 		line = get_next_line(fd); */ | ||||
| /* 		free(line); */ | ||||
| /* 	} */ | ||||
| /* 	free(line); */ | ||||
| /* 	return (0); */ | ||||
| /* } */ | ||||
|  | ||||
| int	main(int ac, char **av, char **env) | ||||
| { | ||||
| 	t_list	**cmds; | ||||
| 	char	*line; | ||||
| 	t_data	data; | ||||
|  | ||||
| 	if (ac == 1) | ||||
| 		return (1); | ||||
| 	line = ft_normalizer(av[1]); | ||||
| 	ft_printf("%s\n", line); | ||||
| 	data.env = init_env(env); | ||||
| 	if (data.env == NULL) | ||||
| 		return (1); | ||||
| 	cmds = ft_parse_cmds(av[1]); | ||||
| 	cmds = ft_parse_cmds(line); | ||||
| 	if (cmds == NULL) | ||||
| 		return (1); | ||||
| 	ft_printf("%s\n", line); | ||||
| 	if (ft_cmds_executor(cmds, env) == 1) | ||||
| 	{ | ||||
| 		ft_lstclear(data.env, env_del); | ||||
| 		ft_lstclear(cmds, ft_lstdel); | ||||
| 		ft_lstclear(cmds, ft_cmddel); | ||||
| 		return (1); | ||||
| 	} | ||||
| 	ft_lstclear(data.env, env_del); | ||||
| 	ft_lstclear(cmds, ft_lstdel); | ||||
| 	ft_lstclear(cmds, ft_cmddel); | ||||
| 	free(cmds); | ||||
| 	free(data.env); | ||||
| 	free(line); | ||||
| 	return (0); | ||||
| } | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user