sparkey_returncode sparkey_logreader_open_noalloc()

in src/logreader.c [56:88]


sparkey_returncode sparkey_logreader_open_noalloc(sparkey_logreader *log, const char *filename) {
  int fd = 0;
  sparkey_returncode returncode;
  TRY(sparkey_load_logheader(&log->header, filename), cleanup);
  log->data_len = log->header.data_end;

  struct stat s;
  stat(filename, &s);
  if (log->data_len > (uint64_t) s.st_size) {
    returncode = SPARKEY_LOG_TOO_SMALL;
    goto cleanup;
  }

  fd = open(filename, O_RDONLY);
  if (fd < 0) {
    returncode = sparkey_open_returncode(errno);
    goto cleanup;
  }
  log->fd = fd;

  log->data = mmap(NULL, log->data_len, PROT_READ, MAP_SHARED, fd, 0);
  if (log->data == MAP_FAILED) {
    returncode = SPARKEY_MMAP_FAILED;
    goto cleanup;
  }

  log->open_status = MAGIC_VALUE_LOGREADER;
  return SPARKEY_SUCCESS;

cleanup:
  if (fd > 0) close(fd);
  return returncode;
}