-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathenv.c
More file actions
95 lines (87 loc) · 2.44 KB
/
Copy pathenv.c
File metadata and controls
95 lines (87 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* env.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: nazouz <nazouz@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/09 16:15:21 by nazouz #+# #+# */
/* Updated: 2024/02/21 12:28:02 by nazouz ### ########.fr */
/* */
/* ************************************************************************** */
#include "Includes/minishell.h"
char *get_env(char **env, char *str)
{
int i;
if (!env)
return (NULL);
i = 0;
while (env[i])
{
if (!ft_strncmp(str, env[i], ft_strlen(str))
&& *(env[i] + ft_strlen(str)) == '=')
return ((env[i] + ft_strlen(str) + 1));
i++;
}
return (NULL);
}
void default_env(t_mini *mini)
{
char *pwd;
mini->env = malloc(4 * sizeof(char *));
if (!mini->env)
ft_exit(mini, NULL, NULL, ENOMEM);
pwd = getcwd(0, 0);
if (!pwd)
ft_exit(mini, NULL, NULL, ENOMEM);
mini->env[0] = ft_strjoin("PWD=", pwd);
if (!mini->env[0])
ft_exit(mini, NULL, NULL, ENOMEM);
free(pwd);
mini->env[1] = ft_strdup("SHLVL=1");
if (!mini->env[1])
ft_exit(mini, NULL, NULL, ENOMEM);
mini->env[2]
= ft_strdup("PATH=/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin");
if (!mini->env[2])
ft_exit(mini, NULL, NULL, ENOMEM);
mini->env[3] = NULL;
}
int env_fill(t_mini *mini, char **env)
{
char *lvl;
int i;
i = 0;
while (env[i])
{
if (!ft_strncmp(env[i], "SHLVL=", 6))
{
lvl = ft_itoa(ft_atoi(env[i] + 6) + 1);
if (!lvl)
return (0);
mini->env[i] = ft_strjoin("SHLVL=", lvl);
free(lvl);
if (!mini->env[i++])
return (0);
}
else
{
mini->env[i] = ft_strdup(env[i]);
if (!mini->env[i++])
return (0);
}
}
mini->env[i] = NULL;
return (1);
}
int mini_env(t_mini *mini, char **env)
{
if (!env || !env[0])
return (default_env(mini), 1);
mini->env = malloc(sizeof(char *) * (len_2d(env) + 1));
if (!mini->env)
ft_exit(mini, NULL, NULL, ENOMEM);
if (!env_fill(mini, env))
ft_exit(mini, NULL, NULL, ENOMEM);
return (1);
}