From: Lennart Poettering Date: Wed, 1 Nov 2023 13:37:05 +0000 (+0100) Subject: sort-util: make bsearch_safe() actually typesafe, by returning the right type X-Git-Tag: v255-rc1~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=423e2400afbecd0254515209642089ddbf787249;p=thirdparty%2Fsystemd.git sort-util: make bsearch_safe() actually typesafe, by returning the right type --- diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h index 48d5f12fbcd..9c818bd7470 100644 --- a/src/basic/sort-util.h +++ b/src/basic/sort-util.h @@ -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_); \ }) /** diff --git a/src/shared/image-policy.c b/src/shared/image-policy.c index a831d22a04c..3c3de509798 100644 --- a/src/shared/image-policy.c +++ b/src/shared/image-policy.c @@ -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) diff --git a/src/sysupdate/sysupdate-resource.c b/src/sysupdate/sysupdate-resource.c index 197b530a022..15e89336dea 100644 --- a/src/sysupdate/sysupdate-resource.c +++ b/src/sysupdate/sysupdate-resource.c @@ -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( diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c index 050f858719c..9285dd81f07 100644 --- a/src/udev/cdrom_id/cdrom_id.c +++ b/src/udev/cdrom_id/cdrom_id.c @@ -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, };