int my_cd(char *str, t_struct *pile) { struct stat s; int n; char *tmp; n = 0; tmp = NULL; if ((str != NULL) && (*str == 0)) str = my_aff_param_list(pile->my_env, HOME); if (str == NULL) str = my_strdup(pile->home); if ((str != NULL) && (str[0] != '/') && (str[0] != '-') && str[0] != '.') tmp = my_strcat("./", str); else if (str != NULL) tmp = my_strdup(str); if ((str != NULL) && (str[0] != '-') && (stat(tmp, &s) < 0)) { msg_error(str, NO_FILE_DIR, pile); return (0); } if ((str != NULL) && ((str[0] == '-') || (check_perm(s, tmp) == 0))) find_cd(tmp, pile); else msg_error(str, ": Permission denied\n", pile); cd_check(tmp); return (0); }
char *my_cd(char **str, t_mini mini, t_var var) { int d; char *buffer; char **tab3; var.i = 0; var.j = 0; d = cd_check(mini, d); if ((buffer = malloc(sizeof(char *) * PATH_MAX)) == NULL) return (NULL); if ((tab3[1] = malloc(sizeof(char *) * PATH_MAX)) == NULL) return (NULL); getcwd(buffer, sizeof(char *) * PATH_MAX); while (buffer[var.i] != 0) { tab3[1][var.i] = buffer[var.i]; var.i = var.i + 1; } tab3[1][var.i] = '/'; while (str[d][var.j] != 0) { tab3[1][var.i + 1] = str[d][var.j]; var.i = var.i + 1; var.j = var.j + 1; } my_cd_2(tab3, var.i); }
static int cd_write_in_pwd(char **args, char ***env) { char *pwd; char *tmp; pwd = cd_check(args, env); if (chdir(pwd) != -1) { tmp = pwd; if (args[0][0] == '-' && ft_strlen(ft_strrchr(args[0], 'P')) == 1) { pwd = ft_getcwd(tmp, *env); free(tmp); } ft_change_pwds(pwd, env); free(pwd); return (0); } return (cd_error(pwd, args[1])); }