void ft_load_texture(char *s1, char *s2, t_env *env) { int i; t_tex *tmp; tmp = NULL; if (!(tmp = ft_init_tmp(s2, env))) exit(ft_perror("malloc()", env)); if ((env->fd2 = open(s1, O_RDONLY)) < 0) exit(ft_perror("open()", env)); ft_search_line(env->fd2, &env->gnl, &(env->line)); if (env->gnl < 0) exit(ft_perror("get_next_line()", env)); i = 1; if ((env->gnl == 0) || !ft_isdigit(env->line[i])) exit(ft_put_error("ft_load_texture(): invalid XPM file.", env)); if (!ft_init_xpm(env->line, &i, &tmp->xtex)) exit(ft_put_error("ft_load_texture(): invalid XPM file.", env)); if (!ft_init_xpm(env->line, &i, &tmp->ytex)) exit(ft_put_error("ft_load_texture(): invalid XPM file.", env)); if (!ft_init_xpm(env->line, &i, tmp->ctex)) exit(ft_put_error("ft_load_texture(): invalid XPM file.", env)); if (!ft_init_xpm(env->line, &i, &tmp->ctex[1])) exit(ft_put_error("ft_load_texture(): invalid XPM file.", env)); return (ft_load_tex(tmp, env)); }
static void ft_load_tex(t_tex *tmp, t_env *env) { int i[2]; if (!(tmp->color = ft_load_color(env->fd2, tmp->ctex, env))) exit(0); ft_search_line(env->fd2, &(env->gnl), &(env->line)); i[1] = -1; while (ft_check_gnl(env->fd2, env, (i[1] += 1), BLOCK_SIZE) > 0) { if (env->line[0] != '"') exit(ft_put_error("ft_load_tex(): invalid XPM file.", env)); i[0] = -1; while ((i[0] += 1) < BLOCK_SIZE) { if (!ft_put_tex(i, env->line, tmp)) exit(ft_put_error("ft_put_tex(): invalid XPM file.", env)); } env->gnl = get_next_line(env->fd2, &(env->line)); } if (env->gnl < 0) exit(ft_perror("get_next_line()", env)); if ((env->fd2 = close(env->fd2))) exit(ft_perror("close()", env)); }
int ft_file_error(char *str) { if (access(str, F_OK) == -1) ft_put_error(str, "no such file or directory: "); else if (access(str, W_OK) == -1 || access(str, R_OK) == -1) ft_put_error(str, "permission denied: "); else ft_put_error(str, "unknow error: "); return (0); }
int ft_change_pwd(char *path, t_cmd *cmd) { struct stat infos; int error; int ret; error = 0; ret = 0; ret = stat(path, &infos); if (access(path, F_OK) != 0) error = NOTEXIST; else if (!(S_IFDIR == (infos.st_mode & S_IFMT))) error = NOTDIR; else if (access(path, X_OK) != 0) error = NOTACCESS; if (ret == -1 && !error) error = UNDEF; if (error) ft_put_error(error, cmd->args[1]); else { ft_update_env(cmd->envp, "OLDPWD", ft_getenv(*cmd->envp, "PWD")); ft_update_env(cmd->envp, "PWD", path); error = chdir(path); } free(path); return (error != 0); }