Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/builtin/unset.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* unset.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: ssabbaji <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/27 17:56:39 by yabtaour #+# #+# */
9
/* Updated: 2022/09/30 17:00:37 by ssabbaji ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../minishell.h"
14
15
void free_env_node(t_env *env)
16
{
17
if (env)
18
{
19
if (env->name)
20
free(env->name);
21
if (env->value)
22
free(env->value);
23
free(env);
24
}
25
}
26
27
void ft_my_unset(t_data *data, char *cmd)
28
{
29
t_env *env;
30
31
if (!data->lst_env)
32
return ;
33
if (!ft_strcmp(cmd, data->lst_env->name))
34
{
35
env = data->lst_env;
36
data->lst_env = data->lst_env->next;
37
free_env_node(env);
38
return ;
39
}
40
env = data->lst_env;
41
while (env)
42
{
43
if (!ft_strcmp(cmd, env->name))
44
break ;
45
env = env->next;
46
}
47
if (!env)
48
return ;
49
env->prev->next = env->next;
50
if (env->next)
51
env->next->prev = env->prev;
52
free_env_node(env);
53
}
54
55
void ft_pre_unset(t_data *data, char **cmd)
56
{
57
int idx;
58
59
idx = 1;
60
while (cmd[idx])
61
{
62
ft_my_unset(data, cmd[idx]);
63
idx++;
64
}
65
}
66
67
int unset(t_data *data, t_cmd *cmd)
68
{
69
if (!cmd->cmd[1])
70
return (1);
71
ft_pre_unset(data, cmd->cmd);
72
return (0);
73
}
74
75