t_cmd *cd(t_cmd *cmd) { char *home; char buffer[8192]; int ok; set_buffer(buffer, &ok, cmd); if ((size_wordtab(cmd->tabx)) > 1) if ((my_strcmp(cmd->tabx[1], "-")) == 0) cmd = cd_oldpwd(cmd); else ok = chdir(cmd->tabx[1]); else { if ((home = get_info("HOME", cmd->lenv)) == NULL) { cmd->retour = 1; my_fdputstr("bash: cd: HOME not set\n", cmd->fdout); return (cmd); } ok = chdir(home); } if (ok < 0) error_cd(cmd->tabx, home, cmd); else if (ok >= 0 && cmd->retour == 0) set_oldpwd(cmd, buffer); return (cmd); }
char *cd_cleanpath(char *path) { char cpath[2048]; char *pref; if (!ft_strcmp("-", path)) return (cd_oldpwd()); else if (*path != '/') { if (!(pref = ft_getenv("PWD"))) { ft_error("PWD missing"); return (NULL); } ft_sprintf(cpath, "%s/%s/", pref, path); } else ft_sprintf(cpath, "%s/", path); return (clean(path, cpath)); }