| 713 | } |
| 714 | |
| 715 | static void show_providers(request_rec *r) |
| 716 | { |
| 717 | apr_array_header_t *groups = ap_list_provider_groups(r->pool); |
| 718 | ap_list_provider_groups_t *group; |
| 719 | apr_array_header_t *names; |
| 720 | ap_list_provider_names_t *name; |
| 721 | int i,j; |
| 722 | const char *cur_group = NULL; |
| 723 | |
| 724 | qsort(groups->elts, groups->nelts, sizeof(ap_list_provider_groups_t), |
| 725 | cmp_provider_groups); |
| 726 | ap_rputs("<h2><a name=\"providers\">Providers</a></h2>\n<dl>", r); |
| 727 | |
| 728 | for (i = 0; i < groups->nelts; i++) { |
| 729 | group = &APR_ARRAY_IDX(groups, i, ap_list_provider_groups_t); |
| 730 | if (!cur_group || strcmp(cur_group, group->provider_group) != 0) { |
| 731 | if (cur_group) |
| 732 | ap_rputs("\n</dt>\n", r); |
| 733 | cur_group = group->provider_group; |
| 734 | ap_rprintf(r, "<dt><strong>%s</strong> (version <tt>%s</tt>):" |
| 735 | "\n <br />\n", cur_group, group->provider_version); |
| 736 | } |
| 737 | names = ap_list_provider_names(r->pool, group->provider_group, |
| 738 | group->provider_version); |
| 739 | qsort(names->elts, names->nelts, sizeof(ap_list_provider_names_t), |
| 740 | cmp_provider_names); |
| 741 | for (j = 0; j < names->nelts; j++) { |
| 742 | name = &APR_ARRAY_IDX(names, j, ap_list_provider_names_t); |
| 743 | ap_rprintf(r, "<tt> %s</tt><br/>", name->provider_name); |
| 744 | } |
| 745 | } |
| 746 | if (cur_group) |
| 747 | ap_rputs("\n</dt>\n", r); |
| 748 | ap_rputs("</dl>\n<hr />\n", r); |
| 749 | } |
| 750 | |
| 751 | static int cmp_module_name(const void *a_, const void *b_) |
| 752 | { |
no test coverage detected