」 feat(builtins/ft_export): += is added !

This commit is contained in:
yosyo
2024-07-15 18:04:17 +02:00
parent ab717f740b
commit ab8177a419
6 changed files with 67 additions and 32 deletions

View File

@ -6,7 +6,7 @@
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 13:05:18 by adjoly #+# #+# */
/* Updated: 2024/07/15 15:48:38 by mmoussou ### ########.fr */
/* Updated: 2024/07/15 18:00:41 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */
@ -17,24 +17,25 @@
# define PATH_MAX_LEN 4096
void ft_pwd(void);
void ft_pwd(void);
void ft_cd(t_env *env, char *args);
void ft_cd(t_env *env, char *args);
void ft_echo(char **args);
void ft_echo(char **args);
char *ret_cwd(void);
char *ret_cwd(void);
void ft_env(t_env *env);
void ft_env(t_env *env);
void ft_unset(char *arg, t_env *env);
void ft_unset(char *arg, t_env *env);
void free_exit(t_env *env, char **env_array);
void ft_exit(char **argv, int ac, char **env_array, t_env *env);
void free_exit(t_env *env, char **env_array);
void ft_exit(char **argv, int ac, char **env_array, t_env *env);
char **env_get_list(t_env *env);
void add_to_env(char *name, char *content, t_env *env);
int check_export_input(char *input);
void ft_export(char **args, t_env *env);
char **env_get_list(t_env *env);
void add_to_env(char *name, char *content, t_env *env);
int check_export_input(char *input);
unsigned int ft_arraylen(char **s);
void ft_export(char **args, t_env *env);
#endif

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */
/* parsing.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/25 12:20:26 by adjoly #+# #+# */
/* Updated: 2024/07/14 13:45:22 by adjoly ### ########.fr */
/* Updated: 2024/07/15 17:05:47 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/15 12:28:36 by adjoly #+# #+# */
/* Updated: 2024/07/15 16:07:23 by mmoussou ### ########.fr */
/* Updated: 2024/07/15 16:22:12 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,23 +6,13 @@
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/26 08:42:36 by mmoussou #+# #+# */
/* Updated: 2024/07/15 13:31:22 by mmoussou ### ########.fr */
/* Updated: 2024/07/15 18:02:16 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
#include "builtins.h"
uint ft_arraylen(char **s)
{
char **endptr;
endptr = s;
while (*endptr)
endptr++;
return (endptr - s);
}
void ft_arraysort(char **env)
{
char *tmp;
@ -92,6 +82,32 @@ int export_value(char *arg, t_env *env)
return (0);
}
int export_append_value(char *arg, t_env *env)
{
char *name;
char *content;
t_env *env_t;
name = ft_calloc(sizeof(char), ft_strchr(arg, '=') - arg);
content = ft_calloc(sizeof(char), ft_strlen(ft_strchr(arg, '=')));
if (!name || !content)
{
ft_free("cc", &name, &content);
return (-1);
}
ft_strlcpy(name, arg, ft_strchr(arg, '=') - arg);
ft_strlcpy(content, ft_strchr(arg, '=') + 1,
ft_strlen(ft_strchr(arg, '=')) + 1);
env_t = env;
while (env_t && ft_strcmp(env_t->name, name))
env_t = env_t->next;
if (env_t)
env_append(name, content, env);
else
ft_envadd_back(&env, ft_envnew(name, content));
return (0);
}
void ft_export(char **args, t_env *env)
{
int status;
@ -105,7 +121,10 @@ void ft_export(char **args, t_env *env)
{
if (!check_export_input(*args))
{
status = export_value(*args, env);
if (ft_strchr(*args, '=') && (ft_strchr(*args, '=') - 1)[0] == '+')
status = export_append_value(*args, env);
else
status = export_value(*args, env);
if (status)
return ;
}

View File

@ -6,12 +6,22 @@
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/11 18:59:27 by mmoussou #+# #+# */
/* Updated: 2024/07/15 13:33:35 by mmoussou ### ########.fr */
/* Updated: 2024/07/15 18:02:49 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
unsigned int ft_arraylen(char **s)
{
char **endptr;
endptr = s;
while (*endptr)
endptr++;
return (endptr - s);
}
void env_make_str(char *str, char *name, char *content)
{
if (!content)
@ -82,6 +92,11 @@ int check_export_input(char *input)
{
if (!ft_isalnum(input[i]) && input[i] != '_')
{
if (input[i] == '+' && input[i + 1] == '=')
{
i++;
continue ;
}
printf("minishell: export: '%s': not a valid identifier\n", input);
return (1);
}

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */
/* utils_exec_2.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/09 22:53:01 by adjoly #+# #+# */
/* Updated: 2024/07/15 15:23:00 by adjoly ### ########.fr */
/* Updated: 2024/07/15 17:05:33 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */
@ -46,7 +46,7 @@ void __sig(int status)
ft_putendl_fd("Quit (core dumped)", 2);
else
ft_putendl_fd("Quit", 2);
}
}
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
}