char *wbFile_readLine(wbFile_t file) { if (file == NULL) { return NULL; } #ifdef LAZY_FILE_LOAD FILE *handle; memset(buffer, 0, MAX_CHARS_PER_LINE); handle = wbFile_getFileHandle(file); if (fgets(buffer, MAX_CHARS_PER_LINE - 1, handle)) { return buffer; } else { //wbLog(ERROR, "Was not able to read line from ", wbFile_getFileName(file)); return NULL; } #else size_t newOffset; size_t lenToNewLine = 0; const char *tmp; if (wbFile_getData(file) == NULL) { wbFile_setData(file, wbFile_read(file)); fclose(wbFile_getFileHandle(file)); wbFile_setFileHandle(file, NULL); wbFile_setDataOffset(file, 0); wbFile_setLength(file, strlen(wbFile_getData(file))); } memset(buffer, 0, MAX_CHARS_PER_LINE); if (wbFile_getDataOffset(file) >= wbFile_getLength(file)) { return NULL; } newOffset = wbFile_getDataOffset(file); tmp = wbFile_getData(file) + wbFile_getDataOffset(file); while (newOffset < wbFile_getLength(file) && *tmp != '\n') { tmp++; lenToNewLine++; newOffset++; } memcpy(buffer, wbFile_getData(file) + wbFile_getDataOffset(file), lenToNewLine); wbFile_setDataOffset(file, newOffset + 1); return buffer; #endif }
wbFile_t wbFile_new(void) { int idx = wbFile_nextIndex(); wbFile_t file = wbNew(struct st_wbFile_t); wbAssert(idx >= 0); wbFile_setIndex(file, idx); wbFile_setFileName(file, NULL); wbFile_setMode(file, NULL); wbFile_setFileHandle(file, NULL); wbFile_setData(file, NULL); wbFile_handles[idx] = file; return file; }