You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2023/04/30 21:09:55 UTC
[celix] branch hotfix/sort_in_lb_command created (now 97610467)
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a change to branch hotfix/sort_in_lb_command
in repository https://gitbox.apache.org/repos/asf/celix.git
at 97610467 Fix wrong compare function in lb_command.c
This branch includes the following new commits:
new 97610467 Fix wrong compare function in lb_command.c
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[celix] 01/01: Fix wrong compare function in lb_command.c
Posted by pn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch hotfix/sort_in_lb_command
in repository https://gitbox.apache.org/repos/asf/celix.git
commit 97610467d6fd1663836dc6ce0640f43092f7bfbd
Author: Pepijn Noltes <pn...@apache.org>
AuthorDate: Sun Apr 30 23:09:45 2023 +0200
Fix wrong compare function in lb_command.c
Also renames the compare function pointer typedef to
celix_array_list_compare_entries_fp instead of celix_array_list_sort_entries_fp.
And adds the framework bundle to the `lb` result.
---
bundles/shell/shell/src/lb_command.c | 12 +++++++++++-
libs/utils/include/celix_array_list.h | 11 ++++++++---
libs/utils/src/array_list.c | 14 +++++++-------
3 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/bundles/shell/shell/src/lb_command.c b/bundles/shell/shell/src/lb_command.c
index a41ef330..2b81a5b5 100644
--- a/bundles/shell/shell/src/lb_command.c
+++ b/bundles/shell/shell/src/lb_command.c
@@ -20,6 +20,7 @@
#include <stdlib.h>
#include <string.h>
+#include "celix_constants.h"
#include "celix_utils.h"
#include "celix_bundle_context.h"
#include "celix_bundle.h"
@@ -57,7 +58,15 @@ typedef struct lb_command_bundle_info {
} lb_command_bundle_info_t;
static int lbCommand_bundleInfoCmp(celix_array_list_entry_t a, celix_array_list_entry_t b) {
- return (int)(a.intVal - b.intVal);
+ lb_command_bundle_info_t* infoA = a.voidPtrVal;
+ lb_command_bundle_info_t* infoB = b.voidPtrVal;
+ if (infoA->id < infoB->id) {
+ return -1;
+ } else if (infoA->id > infoB->id) {
+ return 1;
+ } else {
+ return 0;
+ }
}
static void lbCommand_collectBundleInfo_callback(void* data, const celix_bundle_t* bnd) {
@@ -91,6 +100,7 @@ static celix_array_list_t* lbCommand_collectBundleInfo(celix_bundle_context_t *c
celix_array_list_t* infoEntries = celix_arrayList_createWithOptions(&opts);
if (infoEntries != NULL) {
celix_bundleContext_useBundles(ctx, (void*)infoEntries, lbCommand_collectBundleInfo_callback);
+ celix_bundleContext_useBundle(ctx, CELIX_FRAMEWORK_BUNDLE_ID, (void*)infoEntries, lbCommand_collectBundleInfo_callback);
celix_arrayList_sortEntries(infoEntries, lbCommand_bundleInfoCmp);
}
return infoEntries;
diff --git a/libs/utils/include/celix_array_list.h b/libs/utils/include/celix_array_list.h
index b0a37cbe..b0fa412a 100644
--- a/libs/utils/include/celix_array_list.h
+++ b/libs/utils/include/celix_array_list.h
@@ -57,7 +57,12 @@ typedef bool (*celix_arrayList_equals_fp)(celix_array_list_entry_t, celix_array_
typedef int (*celix_arrayList_sort_fp)(const void *, const void *);
-typedef int (*celix_array_list_sort_entries_fp)(celix_array_list_entry_t a, celix_array_list_entry_t b);
+/**
+ * @brief Compare function for array list entries, which can be used to sort a array list.
+ */
+typedef int (*celix_array_list_compare_entries_fp)(celix_array_list_entry_t a, celix_array_list_entry_t b);
+
+typedef celix_array_list_compare_entries_fp celix_array_list_sort_entries_fp __attribute__((deprecated("Use celix_arrayList_compare_entries_fp instead")));
/**
@@ -448,13 +453,13 @@ void celix_arrayList_removeSize(celix_array_list_t *list, size_t value);
* @brief Sort the array list using the provided sort function.
*/
CELIX_UTILS_EXPORT
-void celix_arrayList_sortEntries(celix_array_list_t *list, celix_array_list_sort_entries_fp sortFp);
+void celix_arrayList_sortEntries(celix_array_list_t *list, celix_array_list_compare_entries_fp compare);
/**
* @warning Never use this function with array of doubles, since on some 32-bit platform (sizeof(double)==8 && sizeof(void*)==4)
* @deprecated This function is deprecated, use celix_arrayList_sortEntries instead.
*/
-CELIX_UTILS_EXPORT
+CELIX_UTILS_DEPRECATED_EXPORT
void celix_arrayList_sort(celix_array_list_t *list, celix_arrayList_sort_fp sortFp);
#ifdef __cplusplus
diff --git a/libs/utils/src/array_list.c b/libs/utils/src/array_list.c
index 27c32010..f24a03e8 100644
--- a/libs/utils/src/array_list.c
+++ b/libs/utils/src/array_list.c
@@ -583,21 +583,21 @@ void celix_arrayList_clear(celix_array_list_t *list) {
}
#if defined(__APPLE__)
-static int celix_arrayList_compareEntries(void *arg, const void * voidA, const void *voidB) {
+static int celix_arrayList_compareEntries(void* arg, const void* voidA, const void* voidB) {
#else
-static int celix_arrayList_compareEntries(const void* voidA, const void* voidB, void *arg) {
+static int celix_arrayList_compareEntries(const void* voidA, const void* voidB, void* arg) {
#endif
- celix_array_list_sort_entries_fp sort = arg;
+ celix_array_list_compare_entries_fp compare = arg;
const celix_array_list_entry_t* a = voidA;
const celix_array_list_entry_t* b = voidB;
- return sort(*a, *b);
+ return compare(*a, *b);
}
-void celix_arrayList_sortEntries(celix_array_list_t *list, celix_array_list_sort_entries_fp sortFp) {
+void celix_arrayList_sortEntries(celix_array_list_t *list, celix_array_list_compare_entries_fp compare) {
#if defined(__APPLE__)
- qsort_r(list->elementData, list->size, sizeof(celix_array_list_entry_t), sortFp, celix_arrayList_compareEntries);
+ qsort_r(list->elementData, list->size, sizeof(celix_array_list_entry_t), compare, celix_arrayList_compareEntries);
#else
- qsort_r(list->elementData, list->size, sizeof(celix_array_list_entry_t), celix_arrayList_compareEntries, sortFp);
+ qsort_r(list->elementData, list->size, sizeof(celix_array_list_entry_t), celix_arrayList_compareEntries, compare);
#endif
}