poldek: poldek/install3/misc.c - multilib: fixed choose equiv

mis mis at pld-linux.org
Wed Oct 28 21:41:12 CET 2009


Author: mis                          Date: Wed Oct 28 20:41:12 2009 GMT
Module: poldek                        Tag: HEAD
---- Log message:
- multilib: fixed choose equiv

---- Files affected:
poldek/poldek/install3:
   misc.c (1.12 -> 1.13) 

---- Diffs:

================================================================
Index: poldek/poldek/install3/misc.c
diff -u poldek/poldek/install3/misc.c:1.12 poldek/poldek/install3/misc.c:1.13
--- poldek/poldek/install3/misc.c:1.12	Mon Aug 18 11:26:41 2008
+++ poldek/poldek/install3/misc.c	Wed Oct 28 21:41:06 2009
@@ -438,6 +438,7 @@
                             const struct pkg *pkg, const struct capreq *cap,
                             tn_array *pkgs, struct pkg *hint) 
 {
+    tn_array *tmp = NULL;
     int n;
     
     n_assert(pkgs);
@@ -449,27 +450,33 @@
     if (!ts->getop(ts, POLDEK_OP_EQPKG_ASKUSER))
         return hint;
 
-    n_array_sort_ex(pkgs, (tn_fn_cmp)pkg_cmp_name_evr_rev);
+    tmp = n_array_dup(pkgs, (tn_fn_dup)pkg_link);
+    n_array_ctl_set_cmpfn(tmp, (tn_fn_cmp)pkg_cmp_name_evr_rev);
+    n_array_sort(tmp);
 
     if (ts->getop(ts, POLDEK_OP_MULTILIB)) {
-        int size = n_array_size(pkgs);
+        int size = n_array_size(tmp);
 
         //pkgs_array_dump(pkgs, "BEFORE");
-        n_array_uniq_ex(pkgs, (tn_fn_cmp)pkg_cmp_name_evr);
+        n_array_uniq_ex(tmp, (tn_fn_cmp)pkg_cmp_name_evr);
         
         /* ops, same packages, different arch -> no choice */
-        if (n_array_size(pkgs) != size) {
+        if (n_array_size(tmp) != size) {
+            n_array_free(tmp);
             //DBGF("no choice ");
             //pkgs_array_dump(pkgs, "AFTER");
             return hint;
         }
     }
-    
-    n = poldek__choose_equiv(ts, pkg, capreq_stra(cap), pkgs, hint);
-    if (n == -1)
-        return NULL;
 
-    return n_array_nth(pkgs, n);
+    n = poldek__choose_equiv(ts, pkg, capreq_stra(cap), tmp, hint);
+    if (n == -1) 
+        hint = NULL;
+    else 
+        hint = n_array_nth(tmp, n);
+    
+    n_array_free(tmp);
+    return hint;
 }
 
 int i3_is_user_choosable_equiv(struct poldek_ts *ts) 
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/install3/misc.c?r1=1.12&r2=1.13&f=u



More information about the pld-cvs-commit mailing list