/
dollar.c
78 lines (71 loc) · 2.09 KB
/
dollar.c
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
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* dollar.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ael-kadh <ael-kadh@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2014/03/27 09:49:09 by ael-kadh #+# #+# */
/* Updated: 2014/03/27 10:22:27 by ael-kadh ### ########.fr */
/* */
/* ************************************************************************** */
#include "shell.h"
static char *var_dollar(char **var)
{
char *str;
int a;
str = NULL;
a = 1;
if (ft_strchr(*var, '/') && ft_strchr(*var, '.'))
{
if (ft_strchr(*var, '/') - ft_strchr(*var, '.') > 0)
a = 0;
}
if (ft_strchr(*var, '/') && a)
{
str = ft_strsub(*var, ft_strchr(*var, '/') - *var, ft_strlen(*var));
*var = ft_strsub(*var, 0, ft_strchr(*var, '/') - *var);
}
else if (ft_strchr(*var, '.'))
{
str = ft_strsub(*var, ft_strchr(*var, '.') - *var, ft_strlen(*var));
*var = ft_strsub(*var, 0, ft_strchr(*var, '.') - *var);
}
return (str);
}
static char *var_line(char *line, char *var, int i)
{
int len;
len = ft_strlen(var);
while (len)
{
line = decale_word(line, i);
len--;
}
return (line);
}
char *dollar(char *line, int *i, char **env)
{
int len;
char *var;
char *str;
str = NULL;
find_word3(&line[*i], &var, '$', '$');
line = var_line(line, var, *i);
str = var_dollar(&var);
len = search_exp(&var[1], env);
if (len >= 0)
{
line = ft_strinjoin(line, &env[len][ft_strlen(var)], *i);
*i += ft_strlen(&env[len][ft_strlen(var)]) - 1;
if (str)
{
line = ft_strinjoin(line, str, *i + 1);
*i += ft_strlen(str);
ft_strdel(&str);
}
}
else
(*i)--;
return (line);
}