+ while(end > start || !feof(file)) {
+ eol = start;
+
+ /* Look for the end of a line in what is already in the buffer */
+ while(eol < end && raw_line[eol] != '\n') eol++;
+
+ /* if we did not find the of a line, move what has not been
+ processed and is in the buffer to the beginning of the buffer,
+ fill the buffer with new data from the file, and look for the
+ end of a line */
+ if(eol == end) {
+ for(k = 0; k < end - start; k++) {
+ raw_line[k] = raw_line[k + start];
+ }
+ end -= start;
+ eol -= start;
+ start = 0;
+ end += fread(raw_line + end, sizeof(char), BUFFER_SIZE - end, file);
+ while(eol < end && raw_line[eol] != '\n') eol++;
+ }
+
+ /* The end of the line is the buffer size, which means the line is
+ too long */
+
+ if(eol == BUFFER_SIZE) {
+ raw_line[BUFFER_SIZE - 1] = '\0';
+ fprintf(stderr, "Selector: Line too long (max is %d characters):\n",
+ BUFFER_SIZE);
+ fprintf(stderr, raw_line);
+ fprintf(stderr, "\n");
+ exit(1);
+ }
+
+ /* If we got a line, we replace the carriage return by a \0 to
+ finish the string */
+
+ raw_line[eol] = '\0';
+
+ /* here we process the line */
+