」 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 +#+ +:+ +#+ */ /* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 13:05:18 by adjoly #+# #+# */ /* 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -35,6 +35,7 @@ void ft_exit(char **argv, int ac, char **env_array, t_env *env);
char **env_get_list(t_env *env); char **env_get_list(t_env *env);
void add_to_env(char *name, char *content, t_env *env); void add_to_env(char *name, char *content, t_env *env);
int check_export_input(char *input); int check_export_input(char *input);
unsigned int ft_arraylen(char **s);
void ft_export(char **args, t_env *env); void ft_export(char **args, t_env *env);
#endif #endif

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* parsing.h :+: :+: :+: */ /* parsing.h :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/25 12:20:26 by adjoly #+# #+# */ /* 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 +#+ +:+ +#+ */ /* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/15 12:28:36 by adjoly #+# #+# */ /* 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 +#+ +:+ +#+ */ /* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/26 08:42:36 by mmoussou #+# #+# */ /* 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 "minishell.h"
#include "builtins.h" #include "builtins.h"
uint ft_arraylen(char **s)
{
char **endptr;
endptr = s;
while (*endptr)
endptr++;
return (endptr - s);
}
void ft_arraysort(char **env) void ft_arraysort(char **env)
{ {
char *tmp; char *tmp;
@ -92,6 +82,32 @@ int export_value(char *arg, t_env *env)
return (0); 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) void ft_export(char **args, t_env *env)
{ {
int status; int status;
@ -105,6 +121,9 @@ void ft_export(char **args, t_env *env)
{ {
if (!check_export_input(*args)) if (!check_export_input(*args))
{ {
if (ft_strchr(*args, '=') && (ft_strchr(*args, '=') - 1)[0] == '+')
status = export_append_value(*args, env);
else
status = export_value(*args, env); status = export_value(*args, env);
if (status) if (status)
return ; return ;

View File

@ -6,12 +6,22 @@
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */ /* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/11 18:59:27 by mmoussou #+# #+# */ /* 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" #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) void env_make_str(char *str, char *name, char *content)
{ {
if (!content) if (!content)
@ -82,6 +92,11 @@ int check_export_input(char *input)
{ {
if (!ft_isalnum(input[i]) && input[i] != '_') 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); printf("minishell: export: '%s': not a valid identifier\n", input);
return (1); return (1);
} }

View File

@ -3,10 +3,10 @@
/* ::: :::::::: */ /* ::: :::::::: */
/* utils_exec_2.c :+: :+: :+: */ /* 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 #+# #+# */ /* 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */