sparkey_returncode sparkey_load_logheader()

in src/logheader.c [73:104]


sparkey_returncode sparkey_load_logheader(sparkey_logheader *header, const char *filename) {
  FILE *fp = fopen(filename, "r");
  if (fp == NULL) {
    return sparkey_open_returncode(errno);
  }

  uint32_t tmp;
  RETHROW(fread_little_endian32(fp, &tmp));
  if (tmp != LOG_MAGIC_NUMBER) {
    fclose(fp);
    return SPARKEY_WRONG_LOG_MAGIC_NUMBER;
  }
  RETHROW(fread_little_endian32(fp, &header->major_version));
  if (header->major_version != LOG_MAJOR_VERSION) {
    fclose(fp);
    return SPARKEY_WRONG_LOG_MAJOR_VERSION;
  }
  RETHROW(fread_little_endian32(fp, &header->minor_version));
  if (header->minor_version > LOG_MINOR_VERSION) {
    fclose(fp);
    return SPARKEY_UNSUPPORTED_LOG_MINOR_VERSION;
  }
  int version = header->minor_version;
  loader l = loaders[version];
  if (l == NULL) {
    fclose(fp);
    return SPARKEY_INTERNAL_ERROR;
  }
  sparkey_returncode x = (*l)(header, fp);
  fclose(fp);
  return x;
}