/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* env_fill.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cchauvet exit_code); else if (ft_strcmp(key, "$") == 0) value = ft_strdup("PID"); else if (key[0] == '\0') value = ft_strdup("$"); else { value = get_value_by_key(key, data->env); if (value == NULL) value = ft_strdup(""); else value = ft_strdup(value); } if (value == NULL) ft_eprintf("minishell: malloc failed\n"); return (value); } static char *ft_getvalue_by_str(t_data *data, const char *str, size_t *key_len) { char *key; char *value; key = ft_getkey(str); if (key == NULL) return (NULL); *key_len = ft_strlen(key) + 1; value = ft_getvalue(data, key); free(key); return (value); } char *ft_env_filler(t_data *data, const char *str) { char *out; char *temp; char *value; size_t key_len; size_t i; out = ft_strdup(str); if (out == NULL) return (NULL); i = 0; while (out[i] != '\0') { while (ft_is_in_quote(out, i) == 1) i++; while (out[i] == '$') { value = ft_getvalue_by_str(data, out + i, &key_len); if (value == NULL) return (NULL); temp = ft_strreplace(out, value, i, key_len + i); i = i + ft_strlen(value); ft_freer_ultimate(2, value, out); if (temp == NULL) return (NULL); out = temp; } if (out[i] != '\0') i++; } return (out); }