On 24/03/10 16:00, Allan McRae wrote:
Signed-off-by: Allan McRae<[email protected]>
---
  lib/libalpm/package.c |    5 ++++-
  1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index f1682cb..ed6d71d 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -565,7 +565,9 @@ static void find_requiredby(pmpkg_t *pkg, pmdb_t *db, 
alpm_list_t **reqs)
                pmpkg_t *cachepkg = i->data;
                if(_alpm_dep_edge(cachepkg, pkg)) {
                        const char *cachepkgname = cachepkg->name;
-                       *reqs = alpm_list_add(*reqs, strdup(cachepkgname));
+                       if(alpm_list_find_str(*reqs, cachepkgname) == 0) {
+                               *reqs = alpm_list_add(*reqs, 
strdup(cachepkgname));
+                       }
                }
        }
  }
@@ -595,6 +597,7 @@ alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(pmpkg_t 
*pkg)
                        for(i = handle->dbs_sync; i; i = i->next) {
                                db = i->data;
                                find_requiredby(pkg, db,&reqs);
+                               reqs = alpm_list_msort(reqs, 
alpm_list_count(reqs), _alpm_str_cmp);
                        }
                }
        }


I was going to use alpm_list_remove_dups instead of testing for a strings presence before adding it but I find that function quite impractical...

I wonder if any other frontend is using it and whether we could change it to actually removing the duplicates from a list. i.e. return the same list with duplicates removed and their data freed. Or am I missing some usage case where the current functionality is useful?

Allan

Reply via email to