int get_next_line(int const fd, char **line) { static char *end = NULL; char *buf; int ret; if (fd < 0 && BUFF_SIZE < 1 && BUFF_SIZE > 2000000000) return (-1); if (ft_check_end(&end, line) == 1) return (1); if (!(buf = ft_strnew(BUFF_SIZE + 1))) return (-1); while ((ret = read(fd, buf, BUFF_SIZE)) > 0) { if (ft_check_line(&end, &buf, line) == 1) { ft_memdel((void **)&buf); return (1); } } ft_memdel((void **)&buf); *line = ft_strdup(end); ft_memdel((void **)&end); return (ret); }
static float ft_dist_co(t_co co, t_ray *ray, int i, float **v_o) { float a[6]; float c_s[2]; a[4] = i; c_s[0] = pow(cos(co.alph), 2); c_s[1] = pow(sin(co.alph), 2); v_o[0] = ft_vect_base(ray->v, co.mat); v_o[2] = ft_vec_min(ray->o, co.c); v_o[1] = ft_vect_base(v_o[2], co.mat); a[0] = c_s[0] * (v_o[0][1] * v_o[0][1] + v_o[0][2] * v_o[0][2]) - v_o[0][0] * v_o[0][0] * c_s[1]; a[1] = 2 * c_s[0] * (v_o[0][1] * v_o[1][1] + v_o[0][2] * v_o[1][2]) - 2 * c_s[1] * v_o[0][0] * v_o[1][0]; a[2] = c_s[0] * (v_o[1][1] * v_o[1][1] + v_o[1][2] * v_o[1][2]) - c_s[1] * v_o[1][0] * v_o[1][0]; a[3] = a[1] * a[1] - 4 * a[0] * a[2]; if (a[3] < 0) return (D_MAX); a[5] = ft_check_end(co, ray, a, v_o); if (ray->opt_f == 1 && (sqrtf(a[3]) < ray->delta || ray->d_d_end == 1) && a[5] < D_MAX) ray->d_d[4 * MAX_OBJ + i] = 1; else if (a[5] < D_MAX) ray->d_d[4 * MAX_OBJ + i] = 0; return (a[5]); }
static int ft_check_line(char **end, char **buf, char **line) { char *tmp; tmp = ft_strjoin(*end, *buf); free(*end); *end = tmp; return (ft_check_end(end, line)); }
int get_next_line(int const fd, char **line) { static char *end = NULL; char *str; char *buf; size_t ret; char *tmp; ret = 1; str = ft_strnew(BUFF_SIZE); while (ret > 0) { buf = ft_strnew(BUFF_SIZE); ret = read(fd, buf, BUFF_SIZE); buf[ret] = '\0'; tmp = end; if (!ft_check_end(&str, &buf, tmp)) ft_memdel((void**)&end); if (ft_check_line(str, &end, line) == 1) return (1); } *line = str; return (0); }