void m_cd(t_var *v) { v->cd_path = NULL; v->cd_home = m_getenv("HOME", v); v->cd_old = m_getenv("OLDPWD", v); v->cd_pwd = m_getenv("PWD", v); m_setenv("OLDPWD", v->cd_pwd, 1, v); if (v->args[1] != NULL) { v->cd_path = get_path(v->args[1]); if (v->args[1][0] == '~') chdir(ft_strcat(v->cd_home, v->cd_path)); else if (v->args[1][0] == '-') chdir(v->cd_old); else chdir(v->cd_path); } else chdir(v->cd_home); m_setenv("PWD", getcwd(v->cwd, sizeof(v->cwd)), 1, v); free(v->cd_path); free(v->cd_home); free(v->cd_old); free(v->cd_pwd); }
int slave(t_script *args, int fd_slave, int fd_master) { char *tab[3]; tab[0] = NULL; tab[1] = "-i"; tab[2] = NULL; (void)fd_master; dup2(fd_slave, 0); dup2(fd_slave, 1); dup2(fd_slave, 2); close(fd_slave); setsid(); ioctl(0, TIOCSCTTY, 1); if (args->command == NULL || !args->command[0]) { if ((tab[0] = m_getenv("SHELL", args->env)) == NULL) tab[0] = DSHELL; return (ft_print_err(ft_getexec(tab, args->env), tab[0])); } else return (ft_print_err(ft_getexec(args->command, args->env), args->command[0])); }
char *ft_getpath(char *cmd, char **env) { char *path; static char str[256]; int i; int j; i = 0; j = 0; path = m_getenv("PATH", env); while (path && path[i]) { if (path[i++] == ':') { path[i - 1] = '\0'; ft_bzero(&str, 256); ft_strcat(ft_strcat(ft_strcat(str, path + j), "/"), cmd); if (access(str, X_OK) >= 0) return (path = str); j = i; } } return (NULL); }