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 <[email protected]>
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
 }
 

Reply via email to