Esempio n. 1
0
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));
}
Esempio n. 2
0
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));
}
Esempio n. 3
0
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);
}
Esempio n. 4
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);
}