}
ED2KLink* CollectionReader::getNextLink() {
- if (readerInput->isEOF()) {
+ if (readerInput->isEOF() && !growingBuffer.getRemaining()) {
GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__);
return NULL;
}
if (firstLink) {
identifyCollectionType();
- if (readerInput->isEOF()) {
+ if (readerInput->isEOF() && !growingBuffer.getRemaining()) {
GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__);
return NULL;
}
while (!readerInput->isEOF() && !isLineBreakPresent()) {
readMoreBytes();
}
- if (readerInput->isEOF()) {
+ if (readerInput->isEOF() && !growingBuffer.getRemaining()) {
GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] readInput EOF reached.\n", __FILE__, __LINE__);
return NULL;
}
size_t indexOfLineBreak = growingBuffer.indexOf('\n');
- char* line = (char*) calloc(indexOfLineBreak + 1, 1);
- growingBuffer.read(line, indexOfLineBreak + 1);
- line[indexOfLineBreak] = '\0';
- if (line[indexOfLineBreak - 1] == '\r') {
- line[indexOfLineBreak - 1] = '\0';
+ char* line;
+ if (indexOfLineBreak == (size_t) -1) {
+ GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] could not find line break, using remainder of file.\n", __FILE__, __LINE__);
+ indexOfLineBreak = growingBuffer.getRemaining();
+ line = (char*) malloc(indexOfLineBreak + 1);
+ growingBuffer.read(line, indexOfLineBreak);
+ line[indexOfLineBreak] = '\0';
+ } else {
+ line = (char*) malloc(indexOfLineBreak + 1);
+ growingBuffer.read(line, indexOfLineBreak + 1);
+ if (line[indexOfLineBreak] == '\n') {
+ line[indexOfLineBreak] = '\0';
+ }
+ if (line[indexOfLineBreak - 1] == '\r') {
+ line[indexOfLineBreak - 1] = '\0';
+ }
}
growingBuffer.cut();
GlobalSettings::isVerbose() && fprintf(stderr, "[%s:%d] got line: %s\n", __FILE__, __LINE__, line);