static void cd_erreur(char *pwd, char *argum) { struct stat buf; if (stat(argum, &buf) == -1) ft_erreur(argum, ERR_NO_SUCH_FILE, 0); else if (S_ISDIR(buf.st_mode) == 0) ft_erreur(argum, ERR_NOT_A_DIR, 0); else if (access(pwd, X_OK) == -1) ft_erreur(argum, ERR_DENIED, 0); else ft_erreur(argum, ERR_CMD_NOT_FOUND, 0); }
int ft_cd(char **path) { char tmp[500]; if (path[0] && !path[1]) ft_gohome(); else if (ft_strcmp(path[1], "-L") == 0 || ft_strcmp(path[1], "-P") == 0) return (ft_cd_option(path)); else if (path[0] && path[1] && !path[2]) { if (ft_cd_lien(path[1], path) == 1) return (1); else if (chdir(path[1]) == -1) check_existe(path[1], 0); else { if (getcwd(tmp, 500) == NULL) ft_erreur("Récuperation de PWD", 0); ft_stockage_env("OLDPWD", ft_cherche_env("$PWD")->valeur); ft_stockage_env("PWD", tmp); } } else check_existe(path[1], 1); free_tabtab(path); return (1); }
int main(int argc, char **argv) { char BUF[547]; char **map; char save[16][16]; char tab[27]; char end; int taille; int cpt; if (argc != 2) ft_ragequit(); ft_bzero(tab, 27); ft_file(argv[1], BUF); ft_erreur(BUF); ft_search(BUF, tab); taille = ft_sqrt(8 * tab[0]); map = ft_init(taille); ft_clean(save, 15); cpt = 1; end = 0; while (end == 0 && taille >= ft_sqrt(4 * tab[0])) { end = ft_treatment(map, save, tab, cpt); if (taille > ft_sqrt(4 * tab[0])) { taille--; map = ft_init(taille); cpt = ft_try_copy(map, save, taille); } } ft_exit(save, ft_len_save(save)); return (0); }
static void exec_absolu(char *line, t_list *list) { char **str; str = ft_strsplit(line, ' '); if (check_cmd(str[0])) ft_execve(str[0], str, list); else ft_erreur(line, ERR_NO_SUCH_FILE, 0); free_char_array(str); }
void ft_unsetenv(t_list **list, char *line) { char **cmp; cmp = ft_strsplit(line, ' '); if (char_array_size(cmp) >= 2) { list_remove(list, cmp[1]); } else ft_erreur(BUILTIN_UNSETENV, ERR_NOT_ENOUGH_ARGS, 0); free_char_array(cmp); }
void ft_file(const char *str_in, char buffer[547], char tab[27]) { int fd; int cpt; ft_bzero(buffer, 547); ft_bzero(tab, 27); fd = open(str_in, O_RDONLY); if (fd == -1) ft_ragequit(); cpt = read(fd, buffer, 547); if (cpt == -1 || cpt >= 546) ft_ragequit(); buffer[cpt + 1] = '\0'; close(fd); ft_erreur(buffer); ft_search(buffer, tab); }
void list_remove(t_list **list, char *str) { t_list *it; t_list *previous; it = *list; previous = 0; while (it != NULL) { if (ft_strnequ(it->str, str, ft_strlen_char(it->str, '=')) == 1) { if (previous) previous->next = it->next; else *list = it->next; free(it->str); free(it); return ; } previous = it; it = it->next; } ft_erreur(BUILTIN_UNSETENV, ERR_NON_EXISTING_KEY, str); }