Skip to content

Commit d0c91ce

Browse files
committed
ceed - create CEED_MAX_BACKEND_PRIORITY, use to repair registry list reporting
1 parent 71415c5 commit d0c91ce

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

backends/ceed-backend-weak.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include <ceed/backend.h>
2-
#include <limits.h>
32
#include <stdlib.h>
43
#include <stdio.h>
54

@@ -18,7 +17,7 @@ static int CeedRegister_Weak(const char *name, int num_prefixes, ...) {
1817
va_start(prefixes, num_prefixes);
1918
int ierr;
2019
for (int i=0; i<num_prefixes; i++) {
21-
ierr = CeedRegister(va_arg(prefixes, const char*), CeedInit_Weak, UINT_MAX);
20+
ierr = CeedRegister(va_arg(prefixes, const char*), CeedInit_Weak, CEED_MAX_BACKEND_PRIORITY);
2221
CeedChk(ierr);
2322
}
2423
va_end(prefixes);

include/ceed/backend.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020
#define _ceed_backend_h
2121

2222
#include <ceed/ceed.h>
23+
#include <limits.h>
2324
#include <stdbool.h>
2425

2526
#define CEED_INTERN CEED_EXTERN __attribute__((visibility ("hidden")))
2627
#define CEED_UNUSED __attribute__((unused))
2728

2829
#define CEED_MAX_RESOURCE_LEN 1024
30+
#define CEED_MAX_BACKEND_PRIORITY UINT_MAX
2931
#define CEED_ALIGN 64
3032
#define CEED_COMPOSITE_MAX 16
3133
#define CEED_EPSILON 1E-16

interface/ceed.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ int CeedSetData(Ceed ceed, void *data) {
610610
// LCOV_EXCL_START
611611
int CeedRegistryGetList(size_t *n, char ***const resources,
612612
CeedInt **priorities) {
613-
*n = num_backends;
613+
*n = 0;
614614
*resources = malloc(num_backends * sizeof(**resources));
615615
if (!resources)
616616
return CeedError(NULL, CEED_ERROR_MAJOR, "malloc() failure");
@@ -620,8 +620,20 @@ int CeedRegistryGetList(size_t *n, char ***const resources,
620620
return CeedError(NULL, CEED_ERROR_MAJOR, "malloc() failure");
621621
}
622622
for (size_t i=0; i<num_backends; i++) {
623-
*resources[i] = backends[i].prefix;
624-
if (priorities) *priorities[i] = backends[i].priority;
623+
// Only report compiled backends
624+
if (backends[i].priority < CEED_MAX_BACKEND_PRIORITY) {
625+
*resources[i] = backends[i].prefix;
626+
if (priorities) *priorities[i] = backends[i].priority;
627+
*n += 1;
628+
}
629+
}
630+
*resources = realloc(*resources, *n * sizeof(**resources));
631+
if (!resources)
632+
return CeedError(NULL, CEED_ERROR_MAJOR, "realloc() failure");
633+
if (priorities) {
634+
*priorities = realloc(*priorities, *n * sizeof(**priorities));
635+
if (!priorities)
636+
return CeedError(NULL, CEED_ERROR_MAJOR, "realloc() failure");
625637
}
626638
return CEED_ERROR_SUCCESS;
627639
};
@@ -643,7 +655,8 @@ int CeedRegistryGetList(size_t *n, char ***const resources,
643655
**/
644656
int CeedInit(const char *resource, Ceed *ceed) {
645657
int ierr;
646-
size_t match_len = 0, match_idx = UINT_MAX, match_priority = UINT_MAX, priority;
658+
size_t match_len = 0, match_idx = UINT_MAX,
659+
match_priority = CEED_MAX_BACKEND_PRIORITY, priority;
647660

648661
// Find matching backend
649662
if (!resource)
@@ -663,7 +676,9 @@ int CeedInit(const char *resource, Ceed *ceed) {
663676
CEED_VERSION_RELEASE ? "" : "+development");
664677
fprintf(stderr, "Available backend resources:\n");
665678
for (size_t i=0; i<num_backends; i++) {
666-
fprintf(stderr, " %s\n", backends[i].prefix);
679+
// Only report compiled backends
680+
if (backends[i].priority < CEED_MAX_BACKEND_PRIORITY)
681+
fprintf(stderr, " %s\n", backends[i].prefix);
667682
}
668683
fflush(stderr);
669684
match_help = 5; // Delineating character expected

0 commit comments

Comments
 (0)