Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
yabtaour
GitHub Repository: yabtaour/Minishell-42
Path: blob/main/builtin/export/export.c
1407 views
1
/* ************************************************************************** */
2
/* */
3
/* ::: :::::::: */
4
/* export.c :+: :+: :+: */
5
/* +:+ +:+ +:+ */
6
/* By: ssabbaji <[email protected]> +#+ +:+ +#+ */
7
/* +#+#+#+#+#+ +#+ */
8
/* Created: 2022/07/27 17:56:29 by yabtaour #+# #+# */
9
/* Updated: 2022/09/25 17:35:01 by ssabbaji ### ########.fr */
10
/* */
11
/* ************************************************************************** */
12
13
#include "../../minishell.h"
14
15
void ft_print_export(t_data *data)
16
{
17
t_env *env_clone;
18
19
env_clone = data->lst_env;
20
while (env_clone)
21
{
22
printf("declare -x ");
23
printf("%s", env_clone->name);
24
if (env_clone->value)
25
printf("=\"%s\"", env_clone->value);
26
printf("\n");
27
env_clone = env_clone->next;
28
}
29
}
30
31
int valid_name(char *name, t_data **data)
32
{
33
if ((name[0] >= 33 && name[0] < 65) || name[0] == '\0')
34
{
35
printf("bash: export: `%s': not a valid identifier\n", name);
36
(*data)->exit_stat = 1;
37
return (0);
38
}
39
return (1);
40
}
41
42
void ft_normal_export(t_data *data, char *name, char *value)
43
{
44
if (ft_name_exists(data, name))
45
ft_change_env_value(data, name, value);
46
else
47
{
48
ft_add_new_env(data, name, value);
49
free(name);
50
if (value)
51
free(value);
52
}
53
}
54
55
int ft_export_arg(t_data *data, t_cmd *lst_cmd, char *name, char *value)
56
{
57
int i;
58
59
i = 1;
60
while (lst_cmd->cmd[i])
61
{
62
name = ft_get_name_exp(lst_cmd->cmd[i]);
63
value = ft_get_value_exp(lst_cmd->cmd[i]);
64
if (valid_name(name, &data))
65
{
66
if (ft_check_concate(name))
67
ft_concatenate(data, name, value);
68
else
69
ft_normal_export(data, name, value);
70
}
71
else
72
{
73
if (name)
74
free(name);
75
if (value)
76
free(value);
77
}
78
i++;
79
}
80
return (0);
81
}
82
83
int export(t_data *data, t_cmd *lst_cmd)
84
{
85
char *name;
86
char *value;
87
88
name = NULL;
89
value = NULL;
90
if (lst_cmd && !lst_cmd->cmd[1])
91
{
92
ft_sort_env(data);
93
ft_print_export(data);
94
}
95
else
96
return (ft_export_arg(data, lst_cmd, name, value));
97
return (0);
98
}
99
100