void ft_setvar(char ***envp, char *name, char *value) { int i; int size; char **newenv; i = 0; size = ft_strlen(name); while ((*envp)[i]) { if (ft_strncmp((*envp)[i], name, size) == 0 && (*envp)[i][size] == '=') { (*envp)[i][size + 1] = 0; (*envp)[i] = value ? ft_strjoin((*envp)[i], value) : (*envp)[i]; return ; } ++i; } newenv = (char**)malloc((i + 2) * sizeof(char*)); newenv[i + 1] = NULL; newenv[i] = value == 0 ? ft_strdup("=") : ft_strjoin("=", value); newenv[i] = ft_strext(name, newenv[i], 1); while (--i > -1) newenv[i] = ft_strdup((*envp)[i]); ft_doubletabfree(envp); *envp = newenv; }
static void check_stradd_d(t_str *str, double d, int preci) { if (preci <= 0) ft_stradd_int(str, d + 0.5); else ft_stradd_int(str, d); if (preci <= 0) return ; if (!ft_strext(str, preci + 1)) return ; }
void ft_stradd_int(t_str *str, double nbr) { int tmp; int length; if (nbr < 0) length = 2; else length = 1; while ((nbr /= 10) > 1) length++; if (!ft_strext(str, length)) return ; if (nbr < 0) str->content[str->length++] = '-'; length += str->length; while (str->length < length) { nbr *= 10; tmp = (int)nbr; str->content[str->length++] = '0' + tmp; nbr -= tmp; } }