Ok, I burned my brain out on this one real bad. Following dependency resolution is beyond the call of duty, but I feared not, and kept my faith (clinging tightly to the Penguin artifact on my desk) and braved the never-ending loops and cycles.... The result is a fix for this bug (and a severe headache)... Enjoy, Ben NOTE: I make no claims to the correctness of this code. It worked and I am not questioning the technical reasons behind it. Sad that it took me longer to fix this than the other bugs, yet it took the least to patch.
Binary files dpkg-1.4.1.13.old/main/.archives.c.swp and dpkg-1.4.1.13/main/.archives.c.swp differ
diff -urN dpkg-1.4.1.13.old/main/depcon.c dpkg-1.4.1.13/main/depcon.c
--- dpkg-1.4.1.13.old/main/depcon.c Sun Nov 1 11:06:24 1998
+++ dpkg-1.4.1.13/main/depcon.c Tue Oct 12 15:35:38 1999
@@ -44,13 +44,18 @@
struct cyclesofarlink *sol;
const char *postinstfilename;
struct stat stab;
+ struct deppossi *dep;
/* We're investigating the dependency `possi' to see if it
* is part of a loop. To this end we look to see whether the
* depended-on package is already one of the packages whose
* dependencies we're searching.
+ *
+ * We also check to see if it's one of the `possi' in the packages
+ * that we are checking.
*/
- for (sol=sofar; sol && sol->pkg != dependedon; sol=sol->back);
+ for (sol=sofar; sol && sol->pkg != dependedon; sol=sol->back)
+ for (dep=sol->possi; dep && dep->ed != dependedon; dep=dep->next)
/* If not, we do a recursive search on it to see what we find. */
if (!sol) return findbreakcycle(possi->ed,thislink);
Attachment:
pgp52IHno46rP.pgp
Description: PGP signature