Michael Ea
3 years ago
11 changed files with 396 additions and 603 deletions
Binary file not shown.
@ -1,100 +0,0 @@ |
|||||
/* ************************************************************************** */ |
|
||||
/* */ |
|
||||
/* ::: :::::::: */ |
|
||||
/* utils_2.c :+: :+: :+: */ |
|
||||
/* +:+ +:+ +:+ */ |
|
||||
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
|
||||
/* +#+#+#+#+#+ +#+ */ |
|
||||
/* Created: 2022/05/06 13:15:59 by narnaud #+# #+# */ |
|
||||
/* Updated: 2022/05/07 23:04:44 by narnaud@stude ### ########.fr */ |
|
||||
/* */ |
|
||||
/* ************************************************************************** */ |
|
||||
|
|
||||
#include "minishell.h" |
|
||||
|
|
||||
int file_error(char *cmd, char *file, char *msg) |
|
||||
{ |
|
||||
ft_putstr_fd("Minishell: ", 2); |
|
||||
ft_putstr_fd(cmd, 2); |
|
||||
ft_putstr_fd(": ", 2); |
|
||||
ft_putstr_fd(file, 2); |
|
||||
ft_putstr_fd(": ", 2); |
|
||||
ft_putstr_fd(msg, 2); |
|
||||
ft_putchar_fd('\n', 2); |
|
||||
return (0); |
|
||||
} |
|
||||
|
|
||||
static char *get_var_value(t_datas *datas, char **line, int name_len); |
|
||||
|
|
||||
int replace_var(t_datas *datas, char **line, char *tmp, int tmp_i) |
|
||||
{ |
|
||||
int name_len; |
|
||||
int i; |
|
||||
char *value; |
|
||||
|
|
||||
if ((*line)[1] == '?') |
|
||||
{ |
|
||||
value = ft_itoa(datas->exit_code); |
|
||||
name_len = 2; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
name_len = 1; |
|
||||
while (ft_isalpha((*line)[name_len]) \ |
|
||||
|| ft_isdigit((*line)[name_len]) || (*line)[name_len] == '_') |
|
||||
name_len++; |
|
||||
value = get_var_value(datas, line, name_len); |
|
||||
} |
|
||||
i = 0; |
|
||||
while (value[i]) |
|
||||
tmp[tmp_i++] = value[i++]; |
|
||||
tmp[tmp_i] = 0; |
|
||||
*line += name_len; |
|
||||
free(value); |
|
||||
return (tmp_i); |
|
||||
} |
|
||||
|
|
||||
char *expend_str(t_datas *datas, char *line) |
|
||||
{ |
|
||||
char *tmp; |
|
||||
int tmp_i; |
|
||||
|
|
||||
tmp = ft_calloc(STR_MAX_SIZE, sizeof(*tmp)); |
|
||||
if (!tmp) |
|
||||
free(tmp); |
|
||||
tmp_i = 0; |
|
||||
while (*line) |
|
||||
{ |
|
||||
if (*line == '$') |
|
||||
tmp_i = replace_var(datas, &line, tmp, tmp_i); |
|
||||
else |
|
||||
tmp[tmp_i++] = *(line++); |
|
||||
} |
|
||||
return (tmp); |
|
||||
} |
|
||||
|
|
||||
static char *get_var_value(t_datas *datas, char **line, int name_len) |
|
||||
{ |
|
||||
int i; |
|
||||
char **env; |
|
||||
char *name; |
|
||||
char *value; |
|
||||
|
|
||||
name = ft_substr(*line, 1, name_len - 1); |
|
||||
i = 0; |
|
||||
value = NULL; |
|
||||
while (datas->envp[i] && !value) |
|
||||
{ |
|
||||
env = ft_split(datas->envp[i], '='); |
|
||||
if (!ft_strncmp(name, env[0], name_len + 1)) |
|
||||
value = (free(env[0]), env[1]); |
|
||||
else if (++i) |
|
||||
ft_free_split(env); |
|
||||
} |
|
||||
free(name); |
|
||||
if (value) |
|
||||
free(env); |
|
||||
else |
|
||||
value = strdup(""); |
|
||||
return (value); |
|
||||
} |
|
Loading…
Reference in new issue