logres_parse_status_t logres_parse_ini(logres_t *r, const char *ini, uint32_t *err_pos) { const char *section_pos; char *num_end; unsigned long index; const char *k_s, *k_e, *v_s, *v_e; logres_parse_status_t st; section_pos = ini; while(1) { section_pos = find_next_section(section_pos); if(section_pos == NULL) return LOGRES_PARSE_OK; v_e = section_pos; while(1) { st = get_next_token_value(&k_s, &k_e, &v_s, &v_e); if(st != LOGRES_PARSE_OK) { if(err_pos != NULL) *err_pos = v_e-ini; return st; } if(v_e == NULL) break; if(cmp_key(k_s, k_e, "INDEX")) break; } if(v_e == NULL) { if(err_pos != NULL) *err_pos = section_pos-ini; return LOGRES_PARSE_NO_INDEX; } index = strtoul(v_s, &num_end, 16); if(num_end != v_e) { if(err_pos != NULL) *err_pos = num_end-ini; return LOGRES_PARSE_BAD_NUMBER; } v_e = section_pos; while(1) { st = get_next_token_value(&k_s, &k_e, &v_s, &v_e); if(st != LOGRES_PARSE_OK) { if(err_pos != NULL) *err_pos = v_e-ini; return st; } if(v_e == NULL) break; if(cmp_key(k_s, k_e, "INDEX")) continue; st = add_res_string(r, index, k_s, k_e, v_s, v_e); if(st != LOGRES_PARSE_OK) { if(err_pos != NULL) *err_pos = v_e-ini; return st; } } } }
static inline int cmp_order(const struct top *a, const struct top *b) { if (a->count > b->count) return (-1); else if (a->count < b->count) return (1); return (cmp_key(a, b)); }