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 }
char * wbFile_read(wbFile_t file) { size_t len; if (file == NULL) { return NULL; } len = wbFile_size(file); if (len == 0) { return NULL; } wbFile_setLength(file, len); return wbFile_read(file, len); }
size_t wbFile_size(wbFile_t file) { size_t len; FILE *handle; if (file == NULL) { return 0; } #ifndef LAZY_FILE_LOAD if (wbFile_getData(file) != NULL) { if (wbFile_getLength(file) == 0) { wbFile_setLength(file, strlen(wbFile_getData(file))); } return wbFile_getLength(file); } #endif /* LAZY_FILE_LOAD */ handle = wbFile_getFileHandle(file); fseek(handle, 0, SEEK_END); len = ftell(handle); rewind(handle); return len; }