char *my_get_next_line(int fd) { static char *buffer; char *line; int i; if ((buffer == NULL && (buffer = my_read_dup(fd, SREAD)) == NULL) || (i = my_check_line(BLANK, buffer)) < 0 || fd < 0) return (NULL); while (i != 1) { if ((line = my_strdup(buffer)) == NULL || (i == 0 && (buffer = my_readline(fd, buffer, SREAD)) == NULL) || (i = my_check_line(line, buffer)) < 0) return (NULL); if (i == 0 && my_strcmp(buffer, line) == 0) { free(buffer); return (NULL); } free(line); } if ((line = my_get_line(buffer)) == NULL || (buffer = my_cut_line(buffer)) == NULL || (i = my_strlen(buffer)) < 0) return (NULL); return (line); }
t_ins *my_read_file(header_t *header, char *file) { t_ins *ins; char *str; int fd; int i; ins = NULL; i = 1; if (header == NULL || (fd = my_open_rdonly(file)) == -1) return (NULL); while ((str = my_get_next_line(fd)) != NULL) { if (my_check_line(header, &str) == 0) if ((ins = my_parse_line(ins, str, i)) == NULL) return (my_put_error_line_null(i, str, "error on this line\n")); i++; free(str); } if (ins != NULL) while (ins->prev != NULL) ins = ins->prev; else return (my_put_error_null("no instruction\n")); return (ins); }