int ft_cd(char **env, char *dir) { char *pwd; int i; if (!dir) dir = ft_get_home(env); dir = ft_split_custom(dir)[0]; if (dir[0] == '~') dir = ft_strjoin(ft_get_home(env), dir + 1); if (dir[0] == '-' && !dir[1]) { dir = env[ft_get_env(env, "OLDPWD")] + 7; ft_putendl(dir); } if (ft_strnequ(dir, "--", 2)) dir = ft_strjoin(ft_get_home(env), dir + 2); i = ft_get_env(env, "OLDPWD"); env[i] = ft_strjoin("OLDPWD=", ft_pwd()); if (chdir(dir) != 0) return (get_error_cd(dir)); pwd = ft_pwd(); i = ft_get_env(env, "PWD"); env[i] = ft_strjoin("PWD=", pwd); return (0); }
static int ft_setenv(char **cmd, t_mlist *mlist) { int i; t_list *tmp; char *bis; char *join; i = 0; if ((i = ft_count_tab(cmd)) == 1) return (ft_env(cmd, mlist)); if (i > 3) return (!ft_putendl_fd("setenv: Too many arguments.", 2)); join = ft_strjoin(cmd[1], "="); bis = join; free(join); join = ft_strjoin(bis, cmd[2]); free(bis); if ((tmp = ft_get_env(cmd[1], mlist->env)) != NULL) { free(tmp->content); tmp->content = join; return (1); } ft_lstpushback(&(mlist->env), join, ft_strlen(join) + 1); free(join); return (1); }
int main(int argc, char **argv, char **env) { t_env *e; UNUSED argc; UNUSED argv; if ((e = (t_env*)(ft_memalloc(sizeof(t_env)))) == NULL) ft_mallerr(); e->env = env; e->path = ft_load_path(ft_get_env("PATH", e->env)); ft_command_line(e); return 0; }
static int ft_unsetenv(char **cmd, t_mlist *mlist) { t_list *tmp; t_list *cur; cur = mlist->env; if (ft_count_tab(cmd) == 1) return (!ft_putendl_fd("unsetenv: Too few arguments.", 2)); if ((tmp = ft_get_env(cmd[1], mlist->env)) == NULL) return (1); while (cur && cur->next && cur->next != tmp) cur = cur->next; if (mlist->env && tmp == mlist->env) mlist->env = mlist->env->next; else if (cur && tmp) cur->next = tmp->next; free(tmp->content); free(tmp); return (1); }
void ft_search_lst(t_env **env, char *s) { t_env *tmp; int len; tmp = *env; len = 0; while (s[len] != '=' && s[len]) len++; while (tmp) { if (ft_strncmp(tmp->name, s, ft_strlen(tmp->name)) == 0) { free(tmp->val); tmp->val = ft_strsub(s, (len + 1), (ft_strlen(s) - len)); return ; } tmp = tmp->next; } if (!tmp || !*env) *env = ft_get_env(env, s); }