Compare commits
	
		
			34 Commits
		
	
	
		
			camille
			...
			4c45a2c603
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4c45a2c603 | |||
| b40762478a | |||
| d7032849d6 | |||
| a20fa2a4c6 | |||
| 255892e12e | |||
| 96de7639cd | |||
| 17ece4bc7b | |||
| 73899f5905 | |||
| 373629b541 | |||
| 5caeed312c | |||
| 5e0ae80404 | |||
| 69d6ac533b | |||
| 73d1f11269 | |||
| e8deb0be19 | |||
| ca09c8ed26 | |||
| 3682d0a348 | |||
| e2a40e07fc | |||
| cfd1dffbcf | |||
| 55e378e2cb | |||
| fb8186ac78 | |||
| 3ef58c0116 | |||
| cc74fda339 | |||
| 7eedf74847 | |||
| c75c6838d6 | |||
| 4b5a50d7fe | |||
| 922db1e08f | |||
| e709eb0dbb | |||
| 3ce5b64420 | |||
| a183971a7a | |||
| 5175073708 | |||
| 72f9dd39cf | |||
| 8bd58675e9 | |||
| afd71e5ed8 | |||
| d59562899b | 
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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_split_quoted.c utils/ft_strshift.c utils/ft_quote_remover.c utils/ft_str_is_empty.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 env_fill.c
 | 
			
		||||
SRCS = ${UTILS_SRC} main.c file.c infile.c outfile.c heredoc.c syntatics.c cmd.c cmds.c env.c env2.c env3.c execution.c spacer.c env_fill.c builtins/echo.c builtins/pwd.c builtins/export.c builtins/env.c builtins/cd.c
 | 
			
		||||
 | 
			
		||||
OBJS = ${SRCS:.c=.o}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										57
									
								
								builtins/cd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								builtins/cd.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   cd.c                                               :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/20 14:27:36 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 14:41:58 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "../minishell.h"
 | 
			
		||||
 | 
			
		||||
int	move_folder(char *path, int fd)
 | 
			
		||||
{
 | 
			
		||||
	char	*join;
 | 
			
		||||
 | 
			
		||||
	if (path[0] == '/' || ft_strncmp(path, "..", ft_strlen(path)) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		if (chdir(path) == 0)
 | 
			
		||||
			return (0);
 | 
			
		||||
		ft_printf("chdir error");
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		join = ft_strjoin("/", path);
 | 
			
		||||
		join = ft_strfjoin(get_pwd(fd), join);
 | 
			
		||||
		if (chdir(join) == 0)
 | 
			
		||||
		{
 | 
			
		||||
			free(join);
 | 
			
		||||
			return (0);
 | 
			
		||||
		}
 | 
			
		||||
		free(join);
 | 
			
		||||
		ft_printf("chdir error");
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*int main(int argc, char *argv[]) {
 | 
			
		||||
   char cwd[PATH_MAX];
 | 
			
		||||
   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
			
		||||
       printf("%s\n", cwd);
 | 
			
		||||
   } else {
 | 
			
		||||
       perror("getcwd() error");
 | 
			
		||||
       return 1;
 | 
			
		||||
   }
 | 
			
		||||
   move_folder(argv[1], 1);
 | 
			
		||||
   if (getcwd(cwd, sizeof(cwd)) != NULL) {
 | 
			
		||||
       printf("%s\n", cwd);
 | 
			
		||||
   } else {
 | 
			
		||||
       perror("getcwd() error");
 | 
			
		||||
       return 1;
 | 
			
		||||
   }
 | 
			
		||||
   return 0;
 | 
			
		||||
}*/
 | 
			
		||||
							
								
								
									
										92
									
								
								builtins/echo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								builtins/echo.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,92 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   echo.c                                             :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/17 13:09:08 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 15:38:53 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "../minishell.h"
 | 
			
		||||
 | 
			
		||||
int	is_space(char c)
 | 
			
		||||
{
 | 
			
		||||
	return (c == ' ' || c == '\f' || c == '\v' || c == '\t'
 | 
			
		||||
		|| c == '\r' || c == '\n');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	check_argument(char *str, int *check, int i)
 | 
			
		||||
{
 | 
			
		||||
	int	y;
 | 
			
		||||
 | 
			
		||||
	y = 0;
 | 
			
		||||
	if (str[i] == '-')
 | 
			
		||||
	{
 | 
			
		||||
		while (!is_space(str[i]) || (str[i + 1] == '-' ))
 | 
			
		||||
		{
 | 
			
		||||
			i++;
 | 
			
		||||
			if (is_space(str[i]))
 | 
			
		||||
			{
 | 
			
		||||
				y = i;
 | 
			
		||||
				*check = 1;
 | 
			
		||||
			}
 | 
			
		||||
			else if (str[i] == '-' && str[i - 1] != '-')
 | 
			
		||||
				;
 | 
			
		||||
			else if (str[i] != 'n')
 | 
			
		||||
				break ;
 | 
			
		||||
		}
 | 
			
		||||
		i = y;
 | 
			
		||||
		while (is_space(str[i]))
 | 
			
		||||
			i++;
 | 
			
		||||
	}
 | 
			
		||||
	return (i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *conca(char **strings)
 | 
			
		||||
{
 | 
			
		||||
	int len;
 | 
			
		||||
	char *result;
 | 
			
		||||
	char *p;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	i = -1;
 | 
			
		||||
	while (strings[++i] != NULL)
 | 
			
		||||
		len += strlen(strings[i]);
 | 
			
		||||
	result = (char *) malloc(len * 2 + 1);
 | 
			
		||||
	if (result == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	p = result;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (strings[i] != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_strncpy(p, strings[i], ft_strlen(strings[i]));
 | 
			
		||||
		ft_strncpy(p, " ", 1);
 | 
			
		||||
		p += strlen(strings[i]);
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	return (result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int	echo(int fd, char **strs)
 | 
			
		||||
{
 | 
			
		||||
	int		check;
 | 
			
		||||
	int		i;
 | 
			
		||||
	char	*str;
 | 
			
		||||
 | 
			
		||||
	str = conca(strs);
 | 
			
		||||
	check = 0;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (is_space(str[i]))
 | 
			
		||||
		i++;
 | 
			
		||||
	i = check_argument(str, &check, i);
 | 
			
		||||
	while (str[i])
 | 
			
		||||
		ft_putchar_fd(fd, str[i++]);
 | 
			
		||||
	if (!check)
 | 
			
		||||
		write(fd, "\n", 1);
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
@ -12,14 +12,17 @@
 | 
			
		||||
 | 
			
		||||
#include "../minishell.h"
 | 
			
		||||
 | 
			
		||||
int	main(char **env)
 | 
			
		||||
int	print_env(t_list **head, int fd)
 | 
			
		||||
{
 | 
			
		||||
	t_list	**head;
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
 | 
			
		||||
	while (current != NULL)
 | 
			
		||||
	current = *head;
 | 
			
		||||
	while (current->next != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_putendl_fd(1, current->content);
 | 
			
		||||
		ft_putstr_fd(((t_env *)(current->content))->key, fd);
 | 
			
		||||
		ft_putstr_fd("=", fd);
 | 
			
		||||
		ft_putstr_fd(((t_env *)(current->content))->value, fd);
 | 
			
		||||
		write(fd, "\n", 1);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
@ -12,29 +12,20 @@
 | 
			
		||||
 | 
			
		||||
#include "../minishell.h"
 | 
			
		||||
 | 
			
		||||
int	main(char **env)
 | 
			
		||||
int	print_export(t_list **head, int fd)
 | 
			
		||||
{
 | 
			
		||||
	t_list	**env_lst;
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
	char	*key;
 | 
			
		||||
	char	*value;
 | 
			
		||||
 | 
			
		||||
	env_lst = init_env(env);
 | 
			
		||||
	current = *env_lst;
 | 
			
		||||
	while (current != NULL)
 | 
			
		||||
	current = *head;
 | 
			
		||||
	while (current->next != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		value = ft_strchr(current->content, '=') + 1;
 | 
			
		||||
		key = ft_strndup(current->content,
 | 
			
		||||
				ft_strlen(current->content) - ft_strlen(value));
 | 
			
		||||
		if (key == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			ft_lstclear(env_lst, env_del);
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		ft_printf("declare -x %s=\"%s\"\n", key, value);
 | 
			
		||||
		free(key);
 | 
			
		||||
		write(fd, "declare -x ", 11);
 | 
			
		||||
		ft_putstr_fd(((t_env *)(current->content))->key, fd);
 | 
			
		||||
		ft_putstr_fd("=", fd);
 | 
			
		||||
		write(fd, "\"", 1);
 | 
			
		||||
		ft_putstr_fd(((t_env *)(current->content))->value, fd);
 | 
			
		||||
		write(fd, "\"\n", 2);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	ft_lstclear(env_lst, env_del);
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								builtins/pwd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								builtins/pwd.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   pwd.c                                              :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/17 16:09:11 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 15:11:38 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "../minishell.h"
 | 
			
		||||
 | 
			
		||||
int	pwd(int fd)
 | 
			
		||||
{
 | 
			
		||||
	char	path[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
	if (getcwd(path, sizeof(path)) != NULL) 
 | 
			
		||||
		ft_putendl_fd(path, fd);
 | 
			
		||||
	else 
 | 
			
		||||
	{
 | 
			
		||||
		ft_putendl_fd("Error getcwd", fd);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	*get_pwd(int fd)
 | 
			
		||||
{
 | 
			
		||||
	char	*str;
 | 
			
		||||
 | 
			
		||||
	str = ft_calloc(PATH_MAX, sizeof(char *));
 | 
			
		||||
	if (getcwd(str, PATH_MAX) != NULL) 
 | 
			
		||||
		return (str);
 | 
			
		||||
	else 
 | 
			
		||||
	{
 | 
			
		||||
		ft_putendl_fd("Error getcwd", fd);
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								cmd.c
									
									
									
									
									
								
							@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/15 14:18:21 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/16 18:25:14 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/20 14:47:29 by starnakin        ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -39,10 +39,7 @@ int	ft_cmd_filler(t_list *element, char **args, t_list **env)
 | 
			
		||||
	{
 | 
			
		||||
		temp = ft_env_filler(env, args[i]);
 | 
			
		||||
		if (temp == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		free(args[i]);
 | 
			
		||||
		args[i] = temp;
 | 
			
		||||
		ft_quote_remover(temp);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										170
									
								
								env.c
									
									
									
									
									
								
							
							
						
						
									
										170
									
								
								env.c
									
									
									
									
									
								
							@ -6,154 +6,20 @@
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/02 14:39:56 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 13:05:29 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/17 17:11:03 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
 | 
			
		||||
int	get_index(char *s, char c)
 | 
			
		||||
{
 | 
			
		||||
	int	i;
 | 
			
		||||
 | 
			
		||||
	i = -1;
 | 
			
		||||
	while (s[++i])
 | 
			
		||||
		if (s[i] == c)
 | 
			
		||||
			return (i);
 | 
			
		||||
	return (-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	print_export(t_list **head, int fd)
 | 
			
		||||
{
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
 | 
			
		||||
	current = *head;
 | 
			
		||||
	while (current->next != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		write(fd, "declare -x ", 11);
 | 
			
		||||
		ft_putstr_fd(((t_env*)(current->content))->key, fd);
 | 
			
		||||
		ft_putstr_fd("=", fd);
 | 
			
		||||
		write(fd, "\"", 1);
 | 
			
		||||
		ft_putstr_fd(((t_env*)(current->content))->value, fd);
 | 
			
		||||
		write(fd, "\"\n", 2);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	print_env(t_list **head, int fd)
 | 
			
		||||
{
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
 | 
			
		||||
	current = *head;
 | 
			
		||||
	while (current->next != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_putstr_fd(((t_env*)(current->content))->key, fd);
 | 
			
		||||
		ft_putstr_fd("=", fd);
 | 
			
		||||
		ft_putstr_fd(((t_env*)(current->content))->value, fd);
 | 
			
		||||
		write(fd, "\n", 1);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	strcmp_alphabet(char *s1, char *s2)
 | 
			
		||||
{
 | 
			
		||||
	int	i;
 | 
			
		||||
 | 
			
		||||
	if (!s1 || !s2)
 | 
			
		||||
		return (-2);
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (s1[i] && s2[i])
 | 
			
		||||
	{
 | 
			
		||||
		if (s1[i] < s2[i])
 | 
			
		||||
			return (0);
 | 
			
		||||
		else if (s1[i] > s2[i])
 | 
			
		||||
			return (1);
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	return (-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	ft_double_swap(void *a, void *b)
 | 
			
		||||
{
 | 
			
		||||
	void	*c;
 | 
			
		||||
 | 
			
		||||
	c = a;
 | 
			
		||||
	a = b;
 | 
			
		||||
	b = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	exchange(void *a, void *b, void *c)
 | 
			
		||||
{
 | 
			
		||||
	void	*d;
 | 
			
		||||
 | 
			
		||||
	d = a;
 | 
			
		||||
	a = b;
 | 
			
		||||
	b = c;
 | 
			
		||||
	c = d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	*get_value(char *str)
 | 
			
		||||
{
 | 
			
		||||
	char	*s;
 | 
			
		||||
	int		i;
 | 
			
		||||
	int		start;
 | 
			
		||||
 | 
			
		||||
	s = ft_calloc(ft_strlen(str), sizeof(char));
 | 
			
		||||
	start = get_index(str, '=');
 | 
			
		||||
	i = start;
 | 
			
		||||
	while (str[++i])
 | 
			
		||||
		s[i - start - 1] = str[i];
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	env_del(void *ptr)
 | 
			
		||||
{
 | 
			
		||||
	t_env	*content;
 | 
			
		||||
 | 
			
		||||
	content = ptr;
 | 
			
		||||
	free(content->key);
 | 
			
		||||
	free(content->value);
 | 
			
		||||
	free(content);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	*get_key(char *str)
 | 
			
		||||
{
 | 
			
		||||
	char	*s;
 | 
			
		||||
	int		i;
 | 
			
		||||
 | 
			
		||||
	s = ft_calloc(ft_strlen(str), sizeof(char));
 | 
			
		||||
	i = -1;
 | 
			
		||||
	while (str[++i] != '=')
 | 
			
		||||
		s[i] = str[i];
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	swap_env_3(void **a, void **b, void **c)
 | 
			
		||||
{
 | 
			
		||||
	void	*d;
 | 
			
		||||
 | 
			
		||||
	d = *a;
 | 
			
		||||
	*a = *b;
 | 
			
		||||
	*b = *c;
 | 
			
		||||
	*c = d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	swap_env(void **a, void **b)
 | 
			
		||||
{
 | 
			
		||||
	void	*c;
 | 
			
		||||
 | 
			
		||||
	c = *a;
 | 
			
		||||
	*a = *b;
 | 
			
		||||
	*b = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	add_sort(t_list **head, t_env *var)
 | 
			
		||||
{
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
	t_env	*last;
 | 
			
		||||
 | 
			
		||||
	current = *head;
 | 
			
		||||
	while (current->next != NULL && strcmp_alphabet(var->key, ((t_env*)(current->content))->key) != 0)
 | 
			
		||||
	while (current->next != NULL
 | 
			
		||||
		&& ft_strcmp(var->key, ((t_env *)(current->content))->key) != 0)
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	if (current->content == NULL)
 | 
			
		||||
		current->content = var;
 | 
			
		||||
@ -182,7 +48,7 @@ char	*get_value_by_key(char *key, t_list **head)
 | 
			
		||||
			return (((t_env *)current->content)->value);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	return (NULL);
 | 
			
		||||
	return ("");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	set_value_by_key(char *key, char *value, t_list **head)
 | 
			
		||||
@ -218,25 +84,6 @@ int	create_value_by_key(char *key, char *value, t_list **head)
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	**env_to_strs(t_list **head)
 | 
			
		||||
{
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
	t_env	*content;
 | 
			
		||||
	char	**env;
 | 
			
		||||
	int		i;
 | 
			
		||||
 | 
			
		||||
	current = *head;
 | 
			
		||||
	env = ft_calloc(ft_lstsize(*head), sizeof(char *));
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (current->content)
 | 
			
		||||
	{
 | 
			
		||||
		content = current->content;
 | 
			
		||||
		env[i++] = ft_strmerger(3, content->key, "=", content->value);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	return (env);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
t_list	**init_env(char **env)
 | 
			
		||||
{
 | 
			
		||||
	t_list	**head;
 | 
			
		||||
@ -261,12 +108,3 @@ t_list	**init_env(char **env)
 | 
			
		||||
	}
 | 
			
		||||
	return (head);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*int	main(int argc, char *argv[], char **env)
 | 
			
		||||
{
 | 
			
		||||
	t_list	**new;
 | 
			
		||||
 | 
			
		||||
	new = init_env(env);
 | 
			
		||||
	ft_printf("%S", env_to_strs(new));
 | 
			
		||||
	return (0);
 | 
			
		||||
}*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										77
									
								
								env2.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								env2.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   env2.c                                             :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/17 17:22:01 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 17:24:57 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "libftx/libftx.h"
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
 | 
			
		||||
int	get_index(char *s, char c)
 | 
			
		||||
{
 | 
			
		||||
	int	i;
 | 
			
		||||
 | 
			
		||||
	i = -1;
 | 
			
		||||
	while (s[++i])
 | 
			
		||||
		if (s[i] == c)
 | 
			
		||||
			return (i);
 | 
			
		||||
	return (-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	swap_env_3(void **a, void **b, void **c)
 | 
			
		||||
{
 | 
			
		||||
	void	*d;
 | 
			
		||||
 | 
			
		||||
	d = *a;
 | 
			
		||||
	*a = *b;
 | 
			
		||||
	*b = *c;
 | 
			
		||||
	*c = d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	swap_env(void **a, void **b)
 | 
			
		||||
{
 | 
			
		||||
	void	*c;
 | 
			
		||||
 | 
			
		||||
	c = *a;
 | 
			
		||||
	*a = *b;
 | 
			
		||||
	*b = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void	env_del(void *ptr)
 | 
			
		||||
{
 | 
			
		||||
	t_env	*content;
 | 
			
		||||
 | 
			
		||||
	if (ptr == NULL)
 | 
			
		||||
		return ;
 | 
			
		||||
	content = ptr;
 | 
			
		||||
	if (content->key != NULL)
 | 
			
		||||
		free(content->key);
 | 
			
		||||
	if (content->key != NULL)
 | 
			
		||||
		free(content->value);
 | 
			
		||||
	if (content != NULL)
 | 
			
		||||
		free(content);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	**env_to_strs(t_list **head)
 | 
			
		||||
{
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
	t_env	*content;
 | 
			
		||||
	char	**env;
 | 
			
		||||
	int		i;
 | 
			
		||||
 | 
			
		||||
	current = *head;
 | 
			
		||||
	env = ft_calloc(ft_lstsize(*head), sizeof(char *));
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (current->content)
 | 
			
		||||
	{
 | 
			
		||||
		content = current->content;
 | 
			
		||||
		env[i++] = ft_strmerger(3, content->key, "=", content->value);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	return (env);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								env3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								env3.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,63 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   env3.c                                             :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: erey-bet <marvin@42.fr>                    +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/17 17:25:09 by erey-bet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 14:09:42 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "libftx/libftx.h"
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
 | 
			
		||||
char	*get_value(char *str)
 | 
			
		||||
{
 | 
			
		||||
	char	*s;
 | 
			
		||||
	int		i;
 | 
			
		||||
	int		start;
 | 
			
		||||
 | 
			
		||||
	s = ft_calloc(ft_strlen(str), sizeof(char));
 | 
			
		||||
	start = get_index(str, '=');
 | 
			
		||||
	i = start;
 | 
			
		||||
	while (str[++i])
 | 
			
		||||
		s[i - start - 1] = str[i];
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	*get_key(char *str)
 | 
			
		||||
{
 | 
			
		||||
	char	*s;
 | 
			
		||||
	int		i;
 | 
			
		||||
 | 
			
		||||
	s = ft_calloc(ft_strlen(str), sizeof(char));
 | 
			
		||||
	i = -1;
 | 
			
		||||
	while (str[++i] != '=')
 | 
			
		||||
		s[i] = str[i];
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	create_value_by_key_dup(char *key, char *value, t_list **env)
 | 
			
		||||
{
 | 
			
		||||
	char	*key_dup;
 | 
			
		||||
	char	*value_dup;
 | 
			
		||||
 | 
			
		||||
	key_dup = ft_strdup(key);
 | 
			
		||||
	if (key_dup == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	value_dup = ft_strdup(value);
 | 
			
		||||
	if (value_dup == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		free(key);
 | 
			
		||||
		ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	if (create_value_by_key(key_dup, value_dup, env))
 | 
			
		||||
		return (1);
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								env_fill.c
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								env_fill.c
									
									
									
									
									
								
							@ -6,37 +6,55 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/16 16:29:08 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 13:41:51 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/20 15:39:28 by starnakin        ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "libftx/libftx.h"
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
#include "utils/utils.h"
 | 
			
		||||
 | 
			
		||||
static char	*ft_get_value(t_list **env, const char *str, size_t start,
 | 
			
		||||
		size_t stop)
 | 
			
		||||
static char	*ft_get_value(t_list **env, char *key)
 | 
			
		||||
{
 | 
			
		||||
	char	*key;
 | 
			
		||||
	char	*value;
 | 
			
		||||
 | 
			
		||||
	key = ft_strndup(str + start, stop);
 | 
			
		||||
	if (key == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	}
 | 
			
		||||
	value = get_value_by_key(key, env);
 | 
			
		||||
	if (value == NULL)
 | 
			
		||||
		value = "";
 | 
			
		||||
	free(key);
 | 
			
		||||
	return (value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char	*ft_get_key(char *str)
 | 
			
		||||
{
 | 
			
		||||
	char	*key;
 | 
			
		||||
	size_t	i;
 | 
			
		||||
 | 
			
		||||
	i = 1;
 | 
			
		||||
	if (ft_strncmp(str, "$$", 2) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		key = ft_strdup("$");
 | 
			
		||||
		if (key == NULL)
 | 
			
		||||
			ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
		return (key);
 | 
			
		||||
	}
 | 
			
		||||
	if (str[i] == ' ' || str[i] == '\0')
 | 
			
		||||
	{
 | 
			
		||||
		key = ft_strdup("");
 | 
			
		||||
		if (key == NULL)
 | 
			
		||||
			ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
		return (key);
 | 
			
		||||
	}
 | 
			
		||||
	while (str[i] != '\0' && str[i] != '$' && str[i] != ' '
 | 
			
		||||
		&& str[i] != '"')
 | 
			
		||||
			i++;
 | 
			
		||||
	key = ft_strndup(str + 1, i - 1);
 | 
			
		||||
	if (key == NULL)
 | 
			
		||||
		ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
	return (key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char	*ft_env_filler(t_list **env, const char *str)
 | 
			
		||||
{
 | 
			
		||||
	size_t	i;
 | 
			
		||||
	size_t	y;
 | 
			
		||||
	char	*key;
 | 
			
		||||
	char	*out;
 | 
			
		||||
	char	*temp;
 | 
			
		||||
	char	*value;
 | 
			
		||||
@ -54,13 +72,22 @@ char	*ft_env_filler(t_list **env, const char *str)
 | 
			
		||||
			i++;
 | 
			
		||||
		while (out[i] == '$')
 | 
			
		||||
		{
 | 
			
		||||
			y = i + 1;
 | 
			
		||||
			while (out[y] != '\0' && out[y] != '$' && out[y] != ' ')
 | 
			
		||||
				y++;
 | 
			
		||||
			value = ft_get_value(env, out, i + 1, y - i - 1);
 | 
			
		||||
			if (value == NULL)
 | 
			
		||||
			key = ft_get_key(out + i);
 | 
			
		||||
			if (key == NULL)
 | 
			
		||||
			{
 | 
			
		||||
				free(out);
 | 
			
		||||
				return (NULL);
 | 
			
		||||
			temp = ft_strreplace(out, value, i, y);
 | 
			
		||||
			}
 | 
			
		||||
			value = ft_get_value(env, key);
 | 
			
		||||
			if (value == NULL)
 | 
			
		||||
			{
 | 
			
		||||
				free(key);
 | 
			
		||||
				free(out);
 | 
			
		||||
				return (NULL);
 | 
			
		||||
			}
 | 
			
		||||
			temp = ft_strreplace(out, value, i, ft_strlen(key) + 1 + i);
 | 
			
		||||
			free(key);
 | 
			
		||||
			i = i + ft_strlen(value);
 | 
			
		||||
			free(out);
 | 
			
		||||
			if (temp == NULL)
 | 
			
		||||
			{
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								execution.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								execution.c
									
									
									
									
									
								
							@ -1,7 +1,17 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   execution.c                                        :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 12:45:16 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 15:31:02 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "libftx/libftx.h"
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
#include "utils/utils.h"
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
static char	*ft_get_executable_path(char *executable_name, t_list **env)
 | 
			
		||||
{
 | 
			
		||||
@ -10,6 +20,8 @@ static char	*ft_get_executable_path(char *executable_name, t_list **env)
 | 
			
		||||
	char	**tab;
 | 
			
		||||
	size_t	i;
 | 
			
		||||
 | 
			
		||||
	if (executable_name == NULL)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	path = NULL;
 | 
			
		||||
	if (executable_name[0] == '.' || executable_name[0] == '/')
 | 
			
		||||
	{
 | 
			
		||||
@ -83,10 +95,36 @@ static int	ft_excutor(t_cmd *cmd, t_list **env)
 | 
			
		||||
	return (return_value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int	ft_own_cmd(t_list **env, t_cmd *cmd)
 | 
			
		||||
{
 | 
			
		||||
	int	return_code;
 | 
			
		||||
 | 
			
		||||
	return_code = -1;
 | 
			
		||||
	if (ft_strcmp(cmd->executable, "pwd") == 0)
 | 
			
		||||
		return_code = pwd(cmd->fd_out);
 | 
			
		||||
	else if (ft_strcmp(cmd->executable, "env") == 0)
 | 
			
		||||
		return_code = print_env(env, cmd->fd_out);
 | 
			
		||||
	else if (ft_strcmp(cmd->executable, "export") == 0)
 | 
			
		||||
		return_code = (print_export(env, cmd->fd_out));
 | 
			
		||||
	else if (ft_strcmp(cmd->executable, "cd") == 0)
 | 
			
		||||
		return_code = (move_folder(cmd->args[0], cmd->fd_out));
 | 
			
		||||
	/* if (ft_strcmp(cmd->executable, "unset") == 0) */
 | 
			
		||||
	/* 	return_code = (unset(env, cmd->args, cmd->fd_out)); */
 | 
			
		||||
	/* else if (ft_strcmp(cmd->executable, "echo") == 0) */
 | 
			
		||||
	/* 	return_code = (echo(cmd->fd_out, cmd->args + 1)); */
 | 
			
		||||
	else if (ft_strcmp(cmd->executable, "exit") == 0)
 | 
			
		||||
		return_code = -2;
 | 
			
		||||
	if (return_code != -1)
 | 
			
		||||
		cmd->executable = NULL;
 | 
			
		||||
	return (return_code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	ft_cmds_executor(t_list **cmds, t_list **env)
 | 
			
		||||
{
 | 
			
		||||
	t_cmd	*content;
 | 
			
		||||
	t_list	*current;
 | 
			
		||||
	char	*return_value;
 | 
			
		||||
	int		cmd_return;
 | 
			
		||||
	int		fds[2];
 | 
			
		||||
 | 
			
		||||
	current = *cmds;
 | 
			
		||||
@ -103,13 +141,25 @@ int	ft_cmds_executor(t_list **cmds, t_list **env)
 | 
			
		||||
			content->fd_out = fds[1];
 | 
			
		||||
			((t_cmd *) current->next->content)->fd_in = fds[0];
 | 
			
		||||
		}
 | 
			
		||||
		content->executable = ft_get_executable_path(content->executable, env);
 | 
			
		||||
		cmd_return = ft_own_cmd(env, content);
 | 
			
		||||
		if (cmd_return == -1)
 | 
			
		||||
		{
 | 
			
		||||
			content->executable = ft_get_executable_path(
 | 
			
		||||
					content->executable, env);
 | 
			
		||||
			if (content->executable != NULL)
 | 
			
		||||
			ft_excutor(content, env);
 | 
			
		||||
				cmd_return = ft_excutor(content, env);
 | 
			
		||||
		}
 | 
			
		||||
		if (content->fd_in != 0)
 | 
			
		||||
			close(content->fd_in);
 | 
			
		||||
		if (content->fd_out != 1 && content->fd_out != 2)
 | 
			
		||||
			close(content->fd_out);
 | 
			
		||||
		return_value = ft_itoa(cmd_return);
 | 
			
		||||
		if (return_value == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		set_value_by_key("?", return_value, env);
 | 
			
		||||
		current = current->next;
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								infile.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								infile.c
									
									
									
									
									
								
							@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/15 17:52:10 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 13:19:09 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/20 13:05:43 by starnakin        ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -86,13 +86,10 @@ static int	ft_remove_infile(char *line)
 | 
			
		||||
	while (tab[i] != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		if (tab[i][0] == '<')
 | 
			
		||||
		{
 | 
			
		||||
			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1));
 | 
			
		||||
			i++;
 | 
			
		||||
			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1));
 | 
			
		||||
		}
 | 
			
		||||
			ft_strshift(line + y,
 | 
			
		||||
				-1 * (ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 2));
 | 
			
		||||
		else
 | 
			
		||||
			y = y + ft_strlen(tab[i]);
 | 
			
		||||
			y = y + ft_strlen(tab[i]) + (y != 0);
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	ft_freer_tab_ultimate(1, tab);
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2022/09/26 14:47:54 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 16:24:42 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 13:28:19 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,8 @@
 | 
			
		||||
char	*ft_ultoa_base(unsigned long long n, char *base);
 | 
			
		||||
int		ft_printf(const char *format, ...);
 | 
			
		||||
int		ft_eprintf(const char *format, ...);
 | 
			
		||||
int		ft_dprintf(int fd, const char *format, ...);
 | 
			
		||||
int		ft_dprintf(int fd, const char *format, ...);
 | 
			
		||||
char	*get_next_line(int fd);
 | 
			
		||||
size_t	ft_random_generator(size_t start, size_t stop);
 | 
			
		||||
void	ft_freer_tab_ultimate(size_t len, ...);
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2022/10/06 22:01:28 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2022/10/12 16:34:31 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 13:27:31 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -22,3 +22,14 @@ int	ft_printf(const char *format, ...)
 | 
			
		||||
	va_end(va);
 | 
			
		||||
	return (i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int	ft_dprintf(int fd, const char *format, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list	va;
 | 
			
		||||
	int		i;
 | 
			
		||||
 | 
			
		||||
	va_start(va, format);
 | 
			
		||||
	i = ft_vdprintf(fd, format, va);
 | 
			
		||||
	va_end(va);
 | 
			
		||||
	return (i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2022/09/26 14:47:54 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 16:29:18 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 13:27:51 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -32,6 +32,7 @@ int		ft_dprintarg(int fd, int c, va_list va);
 | 
			
		||||
int		ft_dprintstrtab(int fd, char **tab);
 | 
			
		||||
 | 
			
		||||
int		ft_printf(const char *format, ...);
 | 
			
		||||
int		ft_dprintf(int fd, const char *format, ...);	
 | 
			
		||||
int		ft_eprintf(const char *format, ...);
 | 
			
		||||
 | 
			
		||||
int		ft_vdprintf(int fd, const char *format, va_list va);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										41
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								main.c
									
									
									
									
									
								
							@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/16 15:16:14 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 16:06:02 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 14:48:07 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -17,8 +17,13 @@ static char	*ft_get_user_input(t_list **env)
 | 
			
		||||
{
 | 
			
		||||
	char	*line;
 | 
			
		||||
	char	*prompt;
 | 
			
		||||
	char	*pwd;
 | 
			
		||||
 | 
			
		||||
	prompt = ft_strmerger(2, get_value_by_key("PWD", env), "$ ");
 | 
			
		||||
	pwd = get_pwd(2);
 | 
			
		||||
	if (pwd == NULL)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	prompt = ft_strmerger(2, pwd, "$ ");
 | 
			
		||||
	free(pwd);
 | 
			
		||||
	if (prompt == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ft_eprintf("minishell: malloc failed\n");
 | 
			
		||||
@ -33,6 +38,7 @@ static char	*ft_get_user_input(t_list **env)
 | 
			
		||||
static int	ft_minishell(t_list **env, char *line)
 | 
			
		||||
{
 | 
			
		||||
	t_list	**cmds;
 | 
			
		||||
	int		code;
 | 
			
		||||
	char	*line_clean;
 | 
			
		||||
	int		infile;
 | 
			
		||||
	int		outfile;
 | 
			
		||||
@ -68,16 +74,11 @@ static int	ft_minishell(t_list **env, char *line)
 | 
			
		||||
		free(line_clean);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	if (ft_cmds_executor(cmds, env) == 1)
 | 
			
		||||
	{
 | 
			
		||||
		close(outfile);
 | 
			
		||||
		close(infile);
 | 
			
		||||
	code = ft_cmds_executor(cmds, env);
 | 
			
		||||
	ft_lstclear(cmds, ft_cmddel);
 | 
			
		||||
	free(cmds);
 | 
			
		||||
	free(line_clean);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	return (0);
 | 
			
		||||
	return (code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
@ -91,9 +92,6 @@ int	main(int ac, char **av, char **env)
 | 
			
		||||
	data.env = init_env(env);
 | 
			
		||||
	if (data.env == NULL)
 | 
			
		||||
		return (1);
 | 
			
		||||
		free(data.env);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	if (ft_minishell(data.env, av[1]) == 1)
 | 
			
		||||
	{
 | 
			
		||||
		ft_lstclear(data.env, env_del);
 | 
			
		||||
@ -102,14 +100,11 @@ int	main(int ac, char **av, char **env)
 | 
			
		||||
	}
 | 
			
		||||
	ft_lstclear(data.env, env_del);
 | 
			
		||||
	free(data.env);
 | 
			
		||||
	free(line);
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int	main(int ac, char **av, char **env)
 | 
			
		||||
{
 | 
			
		||||
	t_data	data;
 | 
			
		||||
@ -118,6 +113,13 @@ int	main(int ac, char **av, char **env)
 | 
			
		||||
	data.env = init_env(env);
 | 
			
		||||
	if (data.env == NULL)
 | 
			
		||||
		return (1);
 | 
			
		||||
	if (create_value_by_key_dup("", "$", data.env) == 1
 | 
			
		||||
		|| create_value_by_key_dup("?", "0", data.env) == 1)
 | 
			
		||||
	{
 | 
			
		||||
		ft_lstclear(data.env, env_del);
 | 
			
		||||
		free(data.env);
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	line = ft_get_user_input(data.env);
 | 
			
		||||
	if (line == NULL)
 | 
			
		||||
	{
 | 
			
		||||
@ -127,13 +129,8 @@ int	main(int ac, char **av, char **env)
 | 
			
		||||
	}
 | 
			
		||||
	while (line != NULL)
 | 
			
		||||
	{
 | 
			
		||||
		if (ft_minishell(data.env, line) == 1)
 | 
			
		||||
		{
 | 
			
		||||
			ft_lstclear(data.env, env_del);
 | 
			
		||||
			free(data.env);
 | 
			
		||||
			free(line);
 | 
			
		||||
			return (1);
 | 
			
		||||
		}
 | 
			
		||||
		if (ft_minishell(data.env, line) == 2)
 | 
			
		||||
			break ;
 | 
			
		||||
		free(line);
 | 
			
		||||
		line = ft_get_user_input(data.env);
 | 
			
		||||
		if (line == NULL)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										38
									
								
								minishell.h
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								minishell.h
									
									
									
									
									
								
							@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/14 13:45:30 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 14:29:56 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 15:43:50 by erey-bet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -19,12 +19,13 @@
 | 
			
		||||
# include <fcntl.h>
 | 
			
		||||
# include <sys/wait.h>
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
# include <unistd.h>
 | 
			
		||||
# include <limits.h>
 | 
			
		||||
# include <string.h>
 | 
			
		||||
# include <readline/readline.h>
 | 
			
		||||
# include <readline/history.h>
 | 
			
		||||
# define DEBUG 0
 | 
			
		||||
t_list		**init_env(char **env);
 | 
			
		||||
int			set_value_by_key(char *key, char *value, t_list **env);
 | 
			
		||||
char		*get_value_by_key(char *key, t_list **head);
 | 
			
		||||
 | 
			
		||||
int			ft_syntatic_verif(const char *str);
 | 
			
		||||
int			ft_file_is_readable(const char *path);
 | 
			
		||||
int			ft_file_is_writable(const char *path);
 | 
			
		||||
@ -44,6 +45,35 @@ char		*ft_normalizer(char *str);
 | 
			
		||||
char		*ft_env_filler(t_list **env, const char *str);
 | 
			
		||||
char		**env_to_strs(t_list **head);
 | 
			
		||||
 | 
			
		||||
/* Environnement */
 | 
			
		||||
t_list		**init_env(char **env);
 | 
			
		||||
char		**env_to_strs(t_list **head);
 | 
			
		||||
int			create_value_by_key(char *key, char *value, t_list **head);
 | 
			
		||||
int			create_value_by_key_dup(char *key, char *value, t_list **head);
 | 
			
		||||
int			set_value_by_key(char *key, char *value, t_list **head);
 | 
			
		||||
char		*get_value_by_key(char *key, t_list **head);
 | 
			
		||||
int			get_index(char *s, char c);
 | 
			
		||||
void		swap_env_3(void **a, void **b, void **c);
 | 
			
		||||
void		swap_env(void **a, void **b);
 | 
			
		||||
void		env_del(void *ptr);
 | 
			
		||||
char		**env_to_strs(t_list **head);
 | 
			
		||||
char		*get_value(char *str);
 | 
			
		||||
char		*get_key(char *str);
 | 
			
		||||
 | 
			
		||||
/* Echo */
 | 
			
		||||
int			echo(int fd, char **strs);
 | 
			
		||||
/* PWD */
 | 
			
		||||
int			pwd(int fd);
 | 
			
		||||
char		*get_pwd(int fd);
 | 
			
		||||
/* ENV */
 | 
			
		||||
int			print_env(t_list **head, int fd);
 | 
			
		||||
/* EXPORT */
 | 
			
		||||
int			print_export(t_list **head, int fd);
 | 
			
		||||
/* CD */
 | 
			
		||||
int			move_folder(char *path, int fd);
 | 
			
		||||
/* UNSET */
 | 
			
		||||
int			unset(t_list **env, char **args, int fd);
 | 
			
		||||
 | 
			
		||||
typedef struct s_cmd
 | 
			
		||||
{
 | 
			
		||||
	int		fd_in;
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/15 18:01:07 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/17 13:19:46 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/17 19:03:00 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -86,12 +86,11 @@ static int	ft_remove_outfile(char *line)
 | 
			
		||||
	{
 | 
			
		||||
		if (tab[i][0] == '>')
 | 
			
		||||
		{
 | 
			
		||||
			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1));
 | 
			
		||||
			i++;
 | 
			
		||||
			ft_strshift(line + y, -1 * (ft_strlen(tab[i]) + 1));
 | 
			
		||||
			ft_strshift(line + y,
 | 
			
		||||
				-1 * (ft_strlen(tab[i]) + ft_strlen(tab[i + 1]) + 2));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			y = y + ft_strlen(tab[i]);
 | 
			
		||||
			y = y + ft_strlen(tab[i]) + (y != 0);
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	ft_freer_tab_ultimate(1, tab);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								syntatics.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								syntatics.c
									
									
									
									
									
								
							@ -1,3 +1,15 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   syntatics.c                                        :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 13:00:05 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 13:00:06 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "libftx/libftx.h"
 | 
			
		||||
#include "minishell.h"
 | 
			
		||||
#include "utils/utils.h"
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,15 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   ft_is_in_quote.c                                   :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 12:59:34 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 12:59:43 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
 | 
			
		||||
int	ft_is_in_quote(const char *str, size_t n)
 | 
			
		||||
@ -15,13 +27,11 @@ int	ft_is_in_quote(const char *str, size_t n)
 | 
			
		||||
		{
 | 
			
		||||
			if (simple_quoted == 0)
 | 
			
		||||
				double_quoted = !double_quoted;
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		if (str[i] == '\'')
 | 
			
		||||
		{
 | 
			
		||||
			if (double_quoted == 0)
 | 
			
		||||
				simple_quoted = !simple_quoted;
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/15 14:12:00 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/16 13:20:50 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*   Updated: 2023/02/21 14:33:28 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ char	*ft_quote_remover(char *str)
 | 
			
		||||
	ssize_t	stop;
 | 
			
		||||
 | 
			
		||||
	start = -1;
 | 
			
		||||
	stop = -1;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	while (str[i] != '\0')
 | 
			
		||||
	{
 | 
			
		||||
@ -27,17 +28,18 @@ char	*ft_quote_remover(char *str)
 | 
			
		||||
			if (start == -1)
 | 
			
		||||
				start = i;
 | 
			
		||||
			else if (str[i] == str[start])
 | 
			
		||||
			{
 | 
			
		||||
				stop = i;
 | 
			
		||||
				break ;
 | 
			
		||||
		}
 | 
			
		||||
		}
 | 
			
		||||
		i++;
 | 
			
		||||
	}
 | 
			
		||||
	if (start != -1)
 | 
			
		||||
		if (stop != -1)
 | 
			
		||||
		{
 | 
			
		||||
		ft_strshift(str, -1);
 | 
			
		||||
			ft_strshift(str + start, -1);
 | 
			
		||||
			ft_strshift(str + stop - 1, -1);
 | 
			
		||||
			start = -1;
 | 
			
		||||
			stop = -1;
 | 
			
		||||
			i = i - 2;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
			i++;
 | 
			
		||||
	}
 | 
			
		||||
	return (str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,15 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   ft_strnchr.c                                       :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 12:59:06 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 12:59:07 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
 | 
			
		||||
ssize_t	ft_strnchr(const char *str, char c)
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,15 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   ft_strncpy.c                                       :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 12:59:16 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 12:59:19 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
 | 
			
		||||
size_t	ft_strncpy(char *dst, const char *src, size_t n)
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,25 @@
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/*                                                        :::      ::::::::   */
 | 
			
		||||
/*   ft_strreplace.c                                    :+:      :+:    :+:   */
 | 
			
		||||
/*                                                    +:+ +:+         +:+     */
 | 
			
		||||
/*   By: cchauvet <cchauvet@student.42angoulem      +#+  +:+       +#+        */
 | 
			
		||||
/*                                                +#+#+#+#+#+   +#+           */
 | 
			
		||||
/*   Created: 2023/02/21 12:46:20 by cchauvet          #+#    #+#             */
 | 
			
		||||
/*   Updated: 2023/02/21 12:58:44 by cchauvet         ###   ########.fr       */
 | 
			
		||||
/*                                                                            */
 | 
			
		||||
/* ************************************************************************** */
 | 
			
		||||
 | 
			
		||||
#include "utils.h"
 | 
			
		||||
 | 
			
		||||
char	*ft_strreplace(const char *str, const char *fill, size_t start, size_t stop)
 | 
			
		||||
char	*ft_strreplace(const char *str, const char *fill,
 | 
			
		||||
		size_t start, size_t stop)
 | 
			
		||||
{
 | 
			
		||||
	char	*out;
 | 
			
		||||
	size_t	sum;
 | 
			
		||||
 | 
			
		||||
	out = malloc((ft_strlen(str) + ft_strlen(fill) - (stop - start) + 1 * sizeof(char)));
 | 
			
		||||
	out = malloc((ft_strlen(str) + ft_strlen(fill) -\
 | 
			
		||||
				(stop - start) + 1 * sizeof(char)));
 | 
			
		||||
	if (out == NULL)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	ft_strncpy(out, str, start);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user