Exemple #1
0
static int
read_lineno_record_file(mrb_state *mrb, FILE *fp, mrb_irep *irep)
{
  uint8_t header[4];
  const size_t record_header_size = sizeof(header);
  int result;
  size_t i, buf_size;
  size_t len;
  void *ptr;
  uint8_t *buf;

  if (fread(header, record_header_size, 1, fp) == 0) {
    return MRB_DUMP_READ_FAULT;
  }
  buf_size = (size_t)bin_to_uint32(&header[0]);
  if (SIZE_ERROR(buf_size)) {
    return MRB_DUMP_GENERAL_FAILURE;
  }
  ptr = mrb_malloc(mrb, buf_size);
  buf = (uint8_t *)ptr;

  if (fread(&buf[record_header_size], buf_size - record_header_size, 1, fp) == 0) {
    return MRB_DUMP_READ_FAULT;
  }
  result = read_lineno_record_1(mrb, buf, irep, &len);
  mrb_free(mrb, ptr);
  if (result != MRB_DUMP_OK) return result;
  for (i = 0; i < irep->rlen; i++) {
    result = read_lineno_record_file(mrb, fp, irep->reps[i]);
    if (result != MRB_DUMP_OK) break;
  }
  return result;
}
Exemple #2
0
static int
read_lineno_record(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, size_t *lenp)
{
  int result = read_lineno_record_1(mrb, bin, irep, lenp);
  int i;

  if (result != MRB_DUMP_OK) return result;
  for (i = 0; i < irep->rlen; i++) {
    size_t len;

    result = read_lineno_record(mrb, bin, irep->reps[i], &len);
    if (result != MRB_DUMP_OK) break;
    bin += len;
    *lenp += len;
  }
  return result;
}