sparkey_returncode sparkey_logiter_keycmp()

in src/logreader.c [418:460]


sparkey_returncode sparkey_logiter_keycmp(sparkey_logiter *iter1, sparkey_logiter *iter2, sparkey_logreader *log, int *res) {
  uint8_t *first;
  uint64_t first_len;
  uint8_t *second;
  uint64_t second_len;

  RETHROW(sparkey_logiter_keychunk(iter1, log, 1 << 30, &first, &first_len));
  RETHROW(sparkey_logiter_keychunk(iter2, log, 1 << 30, &second, &second_len));

  while (1) {
    if (first_len == 0 && second_len == 0) {
      break;
    }
    if (first_len == 0) {
      *res = -1;
      return SPARKEY_SUCCESS;
    }
    if (second_len == 0) {
      *res = 1;
      return SPARKEY_SUCCESS;
    }

    uint64_t cmp_len = min64(first_len, second_len);
    int v = memcmp(first, second, cmp_len);
    if (v) {
      *res = v;
      return SPARKEY_SUCCESS;
    }
    first += cmp_len;
    first_len -= cmp_len;
    second += cmp_len;
    second_len -= cmp_len;

    if (first_len == 0) {
      RETHROW(sparkey_logiter_keychunk(iter1, log, 1 << 30, &first, &first_len));
    }
    if (second_len == 0) {
      RETHROW(sparkey_logiter_keychunk(iter2, log, 1 << 30, &second, &second_len));
    }
  }
  *res = 0;
  return SPARKEY_SUCCESS;
}