| void *start; | void *start; | ||||
| size_t length; | size_t length; | ||||
| int group3_ix; | int group3_ix; | ||||
| int index; | |||||
| } RGROUP; | } RGROUP; | ||||
| typedef enum | typedef enum | ||||
| if (ix != 0) return ix; | if (ix != 0) return ix; | ||||
| ix = strcmp(a->name, b->name); | ix = strcmp(a->name, b->name); | ||||
| if (ix != 0) return ix; | if (ix != 0) return ix; | ||||
| return (uintptr_t)a->start - (uintptr_t)b->start; | |||||
| return a->index - b->index; | |||||
| } | } | ||||
| static void* output_rule_group(int n_rules, char **rules, char *name, size_t *outsize) | static void* output_rule_group(int n_rules, char **rules, char *name, size_t *outsize) | ||||
| strcpy(rgroup[n_rgroups].name, ctx->group_name); | strcpy(rgroup[n_rgroups].name, ctx->group_name); | ||||
| rgroup[n_rgroups].group3_ix = ctx->group3_ix; | rgroup[n_rgroups].group3_ix = ctx->group3_ix; | ||||
| rgroup[n_rgroups].start = output_rule_group(n_rules, rules, ctx->group_name, &rgroup[n_rgroups].length); | rgroup[n_rgroups].start = output_rule_group(n_rules, rules, ctx->group_name, &rgroup[n_rgroups].length); | ||||
| rgroup[n_rgroups].index = n_rgroups; | |||||
| n_rgroups++; | n_rgroups++; | ||||
| count += n_rules; | count += n_rules; |