]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sort-util: make bsearch_safe() actually typesafe, by returning the right type
authorLennart Poettering <lennart@poettering.net>
Wed, 1 Nov 2023 13:37:05 +0000 (14:37 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 1 Nov 2023 17:18:15 +0000 (17:18 +0000)
src/basic/sort-util.h
src/shared/image-policy.c
src/sysupdate/sysupdate-resource.c
src/udev/cdrom_id/cdrom_id.c

index 48d5f12fbcd0e4209e316547e8b8268ce8c061c9..9c818bd74706dd42652885c4531ace674edcb19a 100644 (file)
@@ -18,7 +18,7 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size,
         ({                                                              \
                 const typeof((b)[0]) *_k = k;                           \
                 int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*, typeof(userdata)) = func; \
-                xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_userdata_fn_t) _func_, userdata); \
+                (typeof((b)[0])*) xbsearch_r((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_userdata_fn_t) _func_, userdata); \
         })
 
 /**
@@ -38,7 +38,7 @@ static inline void* bsearch_safe(const void *key, const void *base,
         ({                                                              \
                 const typeof((b)[0]) *_k = k;                           \
                 int (*_func_)(const typeof((b)[0])*, const typeof((b)[0])*) = func; \
-                bsearch_safe((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_fn_t) _func_); \
+                (typeof((b)[0])*) bsearch_safe((const void*) _k, (b), (n), sizeof((b)[0]), (comparison_fn_t) _func_); \
         })
 
 /**
index a831d22a04cd78dcdc628c995d949c7e77da834e..3c3de5097987bcb9fba60896c94c8d883cc08907 100644 (file)
@@ -22,12 +22,12 @@ static int partition_policy_compare(const PartitionPolicy *a, const PartitionPol
         return CMP(ASSERT_PTR(a)->designator, ASSERT_PTR(b)->designator);
 }
 
-static PartitionPolicy* image_policy_bsearch(const ImagePolicy *policy, PartitionDesignator designator) {
+static const PartitionPolicy* image_policy_bsearch(const ImagePolicy *policy, PartitionDesignator designator) {
         if (!policy)
                 return NULL;
 
         return typesafe_bsearch(
-                        &(PartitionPolicy) { .designator = designator },
+                        &(const PartitionPolicy) { .designator = designator },
                         ASSERT_PTR(policy)->policies,
                         ASSERT_PTR(policy)->n_policies,
                         partition_policy_compare);
@@ -78,7 +78,7 @@ static PartitionPolicyFlags partition_policy_normalized_flags(const PartitionPol
 
 PartitionPolicyFlags image_policy_get(const ImagePolicy *policy, PartitionDesignator designator) {
         PartitionDesignator data_designator = _PARTITION_DESIGNATOR_INVALID;
-        PartitionPolicy *pp;
+        const PartitionPolicy *pp;
 
         /* No policy means: everything may be used in any mode */
         if (!policy)
index 197b530a0224f55a4e8df77485789085ffb13768..15e89336dead426b27cd766151e5f665717accf7 100644 (file)
@@ -531,7 +531,12 @@ Instance* resource_find_instance(Resource *rr, const char *version) {
                 .metadata.version = (char*) version,
         }, *k = &key;
 
-        return typesafe_bsearch(&k, rr->instances, rr->n_instances, instance_cmp);
+        Instance **found;
+        found = typesafe_bsearch(&k, rr->instances, rr->n_instances, instance_cmp);
+        if (!found)
+                return NULL;
+
+        return *found;
 }
 
 int resource_resolve_path(
index 050f858719c2f70f2a0be66c4178afeea09e86bf..9285dd81f075ac0cc776ec1af2a90e2258ff2bfa 100644 (file)
@@ -818,7 +818,7 @@ static int feature_to_string_compare_func(const FeatureToString *a, const Featur
 }
 
 static void print_feature(Feature feature, const char *prefix) {
-        FeatureToString *found, in = {
+        const FeatureToString *found, in = {
                 .feature = feature,
         };