/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* utils_2.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: narnaud +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/05/06 13:15:59 by narnaud #+# #+# */ /* Updated: 2022/05/06 13:25:32 by narnaud ### ########.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); } 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); } 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(1024, sizeof *tmp); if (!tmp) free(tmp); tmp_i = 0; while (*line) { if (*line == '$') tmp_i = replace_var(datas, &line, tmp, tmp_i); tmp[tmp_i] = *line; line++; tmp_i++; } return (tmp); }