int ft_opera_handler(char *str) { int k; char **tb; INIT(int, i, ft_is_opera(str)); if (i >= 0) return (ft_truc2(str, i)); i = red_is(str); IF_(i >= 0); tb = malloc(sizeof(char *) * (COUNTC(str, '>') + COUNTC(str, '<') + 2)); INIT(int, j, ft_getcharpos(str, g_rc[i], 0)); DBA(k, 0, tb[k++], ft_strsub(str, 0, j)); str = str + j; WHILE(i >= 0 && j >= 0); j = ft_getcharpos(str + ((str[1] == g_rc[i]) ? 2 : 1), g_rc[i], 0); IF_(j >= 0); tb[k++] = ft_strsub(str, 0, j + ((str[1] == g_rc[i]) ? 2 : 1)); str = str + ((j > 0) ? j : 1) + ((str[1] == g_rc[i]) ? 2 : 1); i = red_is(str); ELSE(tb[k++] = ft_strdup(str)); ENDWHILE; tb[k] = NULL; return (ft_truc(tb)); ENDIF; return (-2); }
int get_next_line(int const fd, char **line) { char buf[BUF]; static t_gnl *fdlist = NULL; char **memory; int ret; if (fd == CLEAN && line == THIS_CRAP) { fdlist = ft_gnl_init(CLEAN, fdlist); return (0); } if (fd < 0) return (-1); fdlist = ft_gnl_init(fd, fdlist); memory = &(fdlist->memory); while (!(ret = COUNTC(*memory, '\n')) && (ret = read(fd, buf, BUF)) > 0) { *memory = ft_str_expand(*memory, ret); *memory = ft_strncat(*memory, buf, ret); } if ((ret == -1) || (ret == 0 && **memory == '\0')) return (ret); ft_gnl_cut(*memory, line, memory); return (1); }