From cff9e4000582b9cfff142372f3914b2fdb7996fe Mon Sep 17 00:00:00 2001 From: yosyo Date: Mon, 6 May 2024 20:54:12 +0200 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(env):=20adde?= =?UTF-8?q?d=20environment=20functions=20:D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/env/env_cmd.c | 162 +++++++++++++++++++++++++++++ src/env/env_list/ft_envadd_back.c | 28 +++++ src/env/env_list/ft_envadd_front.c | 26 +++++ src/env/env_list/ft_envclear.c | 27 +++++ src/env/env_list/ft_envdelone.c | 23 ++++ src/env/env_list/ft_envlast.c | 22 ++++ src/env/env_list/ft_envnew.c | 26 +++++ src/env/env_list/ft_envsize.c | 28 +++++ src/env_cmd.c | 77 -------------- 9 files changed, 342 insertions(+), 77 deletions(-) create mode 100644 src/env/env_cmd.c create mode 100644 src/env/env_list/ft_envadd_back.c create mode 100644 src/env/env_list/ft_envadd_front.c create mode 100644 src/env/env_list/ft_envclear.c create mode 100644 src/env/env_list/ft_envdelone.c create mode 100644 src/env/env_list/ft_envlast.c create mode 100644 src/env/env_list/ft_envnew.c create mode 100644 src/env/env_list/ft_envsize.c delete mode 100644 src/env_cmd.c diff --git a/src/env/env_cmd.c b/src/env/env_cmd.c new file mode 100644 index 0000000..8bbbebc --- /dev/null +++ b/src/env/env_cmd.c @@ -0,0 +1,162 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* env_cmd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou name) + + ft_strlen(env->content) + 2); + if (!exec_env[i]) + { + ft_free("a", exec_env); + return (NULL); + } + ft_strlcpy(exec_env[i], env->name, ft_strlen(env->name) + 1); + exec_env[i][ft_strlen(env->name)] = '='; + ft_strlcpy(exec_env[i] + ft_strlen(env->name) + 1, + env->content, ft_strlen(env->content) + 1); + env = env->next; + i++; + } + return (exec_env); +} + +int env_create_first_el(char *env_line, t_env *env) +{ + t_env *new; + char *name; + char *content; + + content = ft_strdup(ft_strchr(env_line, '=') + 1); + if (!content) + return (-1); + ft_strchr(env_line, '=')[0] = 0; + name = ft_strdup(env_line); + if (!name) + return (-1); + env->name = name; + env->content = content; + env->next = NULL; + return (0); +} + +t_env *env_create_el(char *env_line) +{ + t_env *new; + char *name; + char *content; + + content = ft_strdup(ft_strchr(env_line, '=') + 1); + if (!content) + return (NULL); + ft_strchr(env_line, '=')[0] = 0; + name = ft_strdup(env_line); + if (!name) + return (NULL); + new = ft_envnew(name, content); + return (new); +} + +int env_init(char **env_d, t_env *env) +{ + t_env *new; + int i; + char bool_first_el; + + i = 0; + bool_first_el = true; + while (env_d[i]) + { + if (bool_first_el) + i = env_create_first_el(env_d[i], env); + if (bool_first_el && i < 0) + return (1); + if (bool_first_el) + bool_first_el = false; + else + { + new = env_create_el(env_d[i]); + if (!new) + { + ft_envclear(&env, free); + return (1); + } + ft_envadd_back(&env, new); + } + i++; + } + return (0); +} + +int env_append(char *name, char *content, t_env *env) +{ + char *new_content; + + while (env && ft_strcmp(env->name, name)) + env = env->next; + if (!env) + return (-1); + new_content = ft_calloc(1, ft_strlen(env->content) + ft_strlen(content)); + ft_strlcpy(new_content, env->content, ft_strlen(env->content) + 1); + ft_strlcpy(new_content + ft_strlen(env->content), + content, ft_strlen(content) + 1); + free(env->content); + env->content = new_content; + return (0); +} + +int env_edit(char *name, char *content, t_env *env) +{ + while (env && ft_strcmp(env->name, name)) + env = env->next; + if (!env) + return (-1); + free(env->content); + env->content = content; + return (0); +} + +int env_delete(char *name, t_env *env) +{ + char *new_content; + t_env *tmp; + + while (env && env->next && ft_strcmp(env->next->name, name)) + env = env->next; + if (!env || !env->next) + return (-1); + ft_free("cc", &env->next->name, &env->next->content); + tmp = env->next; + env->next = env->next->next; + free(tmp); + return (0); +} + +void env_print(t_env *env) +{ + while (env) + { + printf("%s:%s\n", env->name, env->content); + env = env->next; + } +} diff --git a/src/env/env_list/ft_envadd_back.c b/src/env/env_list/ft_envadd_back.c new file mode 100644 index 0000000..6dc9f9b --- /dev/null +++ b/src/env/env_list/ft_envadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou next = new; +} diff --git a/src/env/env_list/ft_envadd_front.c b/src/env/env_list/ft_envadd_front.c new file mode 100644 index 0000000..e30b4fe --- /dev/null +++ b/src/env/env_list/ft_envadd_front.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou next) + new = new->next; + new->next = tmp; +} diff --git a/src/env/env_list/ft_envclear.c b/src/env/env_list/ft_envclear.c new file mode 100644 index 0000000..9e12350 --- /dev/null +++ b/src/env/env_list/ft_envclear.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou next; + ft_envdelone(*lst, del); + *lst = tmp; + } +} diff --git a/src/env/env_list/ft_envdelone.c b/src/env/env_list/ft_envdelone.c new file mode 100644 index 0000000..9cc18b0 --- /dev/null +++ b/src/env/env_list/ft_envdelone.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou name); + del(lst->content); + free(lst); + lst = NULL; +} diff --git a/src/env/env_list/ft_envlast.c b/src/env/env_list/ft_envlast.c new file mode 100644 index 0000000..16bee4b --- /dev/null +++ b/src/env/env_list/ft_envlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou next) + env = env->next; + return (env); +} diff --git a/src/env/env_list/ft_envnew.c b/src/env/env_list/ft_envnew.c new file mode 100644 index 0000000..abf76f1 --- /dev/null +++ b/src/env/env_list/ft_envnew.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou name = name; + r->content = content; + r->next = NULL; + return (r); +} diff --git a/src/env/env_list/ft_envsize.c b/src/env/env_list/ft_envsize.c new file mode 100644 index 0000000..735eb98 --- /dev/null +++ b/src/env/env_list/ft_envsize.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_envsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mmoussou next) + { + lst = lst->next; + i++; + } + return (i); +} diff --git a/src/env_cmd.c b/src/env_cmd.c deleted file mode 100644 index bc0d539..0000000 --- a/src/env_cmd.c +++ /dev/null @@ -1,77 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* env_cmd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: mmoussou name) - + ft_strlen(env->content) + 2); - if (!exec_env[i]) - { - ft_free("a", exec_env); - return (NULL); - } - ft_strlcpy(exec_env[i], env->name, ft_strlen(env->name)); - exec_env[i][ft_strlen(env->name)] = '='; - ft_strlcpy(exec_env[i] + ft_strlen(env->name) + 1, \ - env->content, ft_strlen(env->content)); - env = env->next; - i++; - } - return (exec_env); -} - -char set_env(char **env, const char *name, char *content) -{ - char *new_env; - int i; - int j; - - if (!name || !name[0]) - return (0); - for (int pog = 0; env[pog]; pog++) - printf("%s\n", env[pog]); - new_env = malloc(sizeof(char) * (ft_strlen(name) + ft_strlen(content) + 2)); - if (!new_env) - return (-1); - i = 0; - while (name[i]) - { - new_env[i] = name[i]; - i++; - } - new_env[i++] = '='; - j = 0; - while (content[j]) - { - new_env[i + j] = content[j]; - j++; - } - printf("\n%s\n\n", new_env); - return (0); -}