int exe_cd(t_tree *tree, t_env **env) { if (tree->lexer->next == NULL || my_strcmp(tree->lexer->next->content, "~") == 0) return (cd_home(env)); return (cd_arg(tree->lexer->next, env)); }
void builtin_cd(char ***env, char **cmd) { char *tmp; tmp = NULL; if (cmd[1] == NULL || (ft_strcmp(cmd[1], "~") == 0)) cd_home(env, tmp); else if (ft_strcmp(cmd[1], "-") == 0) cd_minus(env, tmp); else { tmp = cmd[1]; cd_path(env, tmp); } }
void ft_cd(t_lenv **env, char **param) { if (!param[1] || (param[1][0] == '~' && !param[1][1])) cd_home(env); else if (param[1][0] == '$' && param[1][1]) cd_env(env, param[1]); else if (param[1][0] == '-' && !param[1][1]) cd_env_old(env); else if ((param[1][0] == '/') ? check_path_spe(param[1]) : check_path(*env, param[1])) { if (change_oldpwd(env)) change_pwd(env); } }
char cd_tiret(t_arg *targ) { char *tmp; int i; if (targ->wtab[1] != NULL && !my_strncmp(targ->wtab[1], "-", 1) && targ->pwd != NULL) { tmp = targ->pwd; if ((i = find_env(targ->env, "PWD=")) < 0) if ((targ->env = add_env(targ->env, "PWD", '=', "/")) == NULL) return (1); if ((targ->pwd = get_flagss(targ->env, "PWD")) == NULL) return (1); free(targ->env[i]); if ((targ->env[i] = concat_str("PWD", '=', tmp)) == NULL || chdir(tmp) < 0) return (1); return (2); } return (cd_home(targ)); }
static int handle_cd_arg(int *i, int *ret, char **arg) { char *tmp; tmp = get_env("OLDPWD"); if (check_opt(arg, i) == ERROR) { ft_strdel(&tmp); return (FALSE); } if (!arg[*i]) *ret = cd_home(); else if (arg[*i] && arg[*i][0] == '-' && !arg[*i][1]) { if (tmp) *ret = change_dir(tmp); else return (sh_error(TRUE, 11, NULL, NULL)); } else *ret = change_dir(arg[*i]); ft_strdel(&tmp); return (TRUE); }