Exemple #1
0
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
}
Exemple #2
0
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;
}
Exemple #3
0
wbFile_t wbFile_open(const char * fileName, const char * mode) {
    FILE * handle;
    wbFile_t file;

    if (fileName == NULL) {
        return NULL;
    }

    handle = fopen(fileName, mode);
    if (handle == NULL) {
        wbLog(ERROR, "Failed to open ", file, " in mode ", mode);
        return NULL;
    }

    file = wbFile_new();
    wbFile_setFileName(file, wbString_duplicate(fileName));
    wbFile_setMode(file, wbString_duplicate(mode));
    wbFile_setFileHandle(file, handle);

    return file;
}