void do_unsetenv(t_env *env, char *line) { size_t pos; char *tmp; size_t len; pos = 0; while (pos < ENV_TABLE_SIZE && env->env_table[pos][0]) { tmp = get_env_name(env->env_table[pos]); len = strlen(tmp); if (!strncmp(tmp, line, len) && (line[len] == ' ' || line[len] == '\t')) { memcpy(env->env_table[pos], env->env_table[pos + 1], ENV_TABLE_CONTENT_SIZE); while (pos < ENV_TABLE_SIZE && env->env_table[pos + 1][0]) { memcpy(env->env_table[pos], env->env_table[pos + 1], ENV_TABLE_CONTENT_SIZE); ++pos; } env->env_table[pos][0] = '\0'; return ; } ++pos; } }
char *get_env_var(char *var, char **envp) { char *tmp; if (!var || !*var) return (NULL); while (*envp) { tmp = get_env_name(envp, 0); if (ft_strequ(tmp, var)) { ft_strdel(&tmp); tmp = ft_strdup(*envp + ft_strlen(var) + 1); return (tmp); } ft_strdel(&tmp); envp++; } return (NULL); }
static void do_setenv_insert(t_env *env, char buffer[ENV_TABLE_CONTENT_SIZE]) { const char error[] = {"setenv: Too many environment variables\n"}; size_t element; element = 0; while (element < ENV_TABLE_SIZE && env->env_table[element][0]) { if (env_name_match(get_env_name(env->env_table[element]), buffer)) { memcpy(env->env_table[element], buffer, ENV_TABLE_CONTENT_SIZE); return ; } ++element; } if (element < ENV_TABLE_SIZE) { memcpy(env->env_table[element], buffer, ENV_TABLE_CONTENT_SIZE); env->env_table[element + 1][0] = '\0'; } else write(2, error, sizeof(error) - 1); }