~ubuntu-branches/debian/lenny/debfoster/lenny

« back to all changes in this revision

Viewing changes to src/debfoster.c

  • Committer: Bazaar Package Importer
  • Author(s): Florian Weimer
  • Date: 2008-04-19 17:14:49 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20080419171449-mhjgd507macjerdh
Tags: 2.7-1
New upstream version.  Closes: #448501.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
#include <stdlib.h>
4
4
#include <unistd.h>
5
5
#include <getopt.h>
 
6
#include <locale.h>
6
7
#include <sys/file.h>
7
8
#include <sys/ioctl.h>
8
9
 
111
112
static void showinfo(symbol_t pkg) {
112
113
        AVLTree t;
113
114
        AVLNode n;
114
 
        AVLInitTree(&t, (AVLCompare)strcmp, NULL);
 
115
        AVLInitTree(&t, (AVLCompare)strcmp);
115
116
        AVLInitNode(&n, pkg);
116
117
        AVLInsertTopNode(&t, &n);
117
118
        xargs(&t, InfoCmd);
282
283
 
283
284
        if(ppkg->provider_count) {
284
285
                /* Remove multiple alternative dependencies to a dependency loop */
285
 
                AVLInitTree(&depends, (AVLCompare)symcmp, NULL);
286
 
                AVLInitTree(&dependents, (AVLCompare)symcmp, NULL);
 
286
                AVLInitTree(&depends, (AVLCompare)symcmp);
 
287
                AVLInitTree(&dependents, (AVLCompare)symcmp);
287
288
                all_depends(pkg->name, &depends, ENoAlternatives, EAllDepends);
288
289
                all_dependents(pkg->name, &dependents, ENoAlternatives);
289
290
                for(c = ppkg->providers.head; c; c = p) {
299
300
                                ppkg->provider_count--;
300
301
                        }
301
302
                }
302
 
                AVLFreeNodes(&depends);
303
 
                AVLFreeNodes(&dependents);
304
303
        }
305
304
 
306
305
        if (pkg) {
373
372
 */
374
373
void count_orphan_depends(struct package *pkg) {
375
374
        AVLTree visited;
376
 
        AVLInitTree(&visited, (AVLCompare)symcmp, NULL);
 
375
        AVLInitTree(&visited, (AVLCompare)symcmp);
377
376
        pkg->orphan_depends = all_depends(pkg->name, &visited, ECommittedAlternatives, EOrphansOnly);
378
 
        AVLFreeNodes(&visited);
379
377
}
380
378
 
381
379
/* --show-providers option */
406
404
                return;
407
405
        }
408
406
 
409
 
        AVLInitTree(&visited, (AVLCompare)strcasecmp, NULL);
 
407
        AVLInitTree(&visited, (AVLCompare)strcasecmp);
410
408
        all_depends(name, &visited, ECommittedAlternatives, EAllDepends);
411
409
 
412
410
        for(c = visited.head; c; c = p) {
416
414
        }
417
415
        if(!show_set(&visited, _("Package %s depends on:"), name))
418
416
                printf(_("Package %s has no depends.\n"), name);
419
 
 
420
 
        AVLFreeNodes(&visited);
421
417
}
422
418
 
423
419
/* --show-dependents option */
432
428
                return;
433
429
        }
434
430
 
435
 
        AVLInitTree(&dependents, (AVLCompare)symcmp, NULL);
 
431
        AVLInitTree(&dependents, (AVLCompare)symcmp);
436
432
        all_dependents(name, &dependents, ECommittedAlternatives);
437
433
 
438
434
        for(c = dependents.head; c; c = p) {
446
442
        if (!show_set(&dependents, _("The following %d packages on keeper list rely on %s:"), count, name))
447
443
                printf(_("Packages on keeper list do not rely on %s.\n"), name);
448
444
        printf(_("Packages kept by default rules %s %s.\n"), others ? _("rely on") : _("do not rely on"), name);
449
 
 
450
 
        AVLFreeNodes(&dependents);
451
445
}
452
446
 
453
447
/* Find a set of orphan packages that are dependencies of orphan
462
456
        struct package *pkg, *ppkg;
463
457
        int count = 0;
464
458
 
465
 
        AVLInitTree(&ancestors, (AVLCompare)symcmp, NULL);
466
 
        AVLInitTree(&eliminate, (AVLCompare)symcmp, NULL);
 
459
        AVLInitTree(&ancestors, (AVLCompare)symcmp);
 
460
        AVLInitTree(&eliminate, (AVLCompare)symcmp);
467
461
 
468
462
        all_depends(name, set, ECommittedAlternatives, EOrphansOnly);
469
463
        AVLInsert(&ancestors, name);
491
485
                        count++;
492
486
        }
493
487
 
494
 
        AVLFreeNodes(&ancestors);
495
 
        AVLFreeNodes(&eliminate);
496
488
        return count;
497
489
}
498
490
 
507
499
                return;
508
500
        }
509
501
 
510
 
        AVLInitTree(&related, (AVLCompare)strcasecmp, NULL);
 
502
        AVLInitTree(&related, (AVLCompare)strcasecmp);
511
503
        count = related_set(name, &related);
512
504
        if(!show_set(&related, _("The following %d packages are brought in by %s:"), count, name))
513
505
                printf(_("No packages are brought in by %s.\n"), name);
514
 
 
515
 
        AVLFreeNodes(&related);
516
506
}
517
507
 
518
508
/* Push a symbol onto undo stack */
529
519
        if(undo) {
530
520
                symbol_t name = undo->name;
531
521
                undo_stack = undo->prev;
532
 
                free(undo);
533
522
                return name;
534
523
        }
535
524
        return 0;
536
525
}
537
526
 
538
527
int main(int argc, char **argv) {
539
 
        AVLTree trees[9], *installs, *removes, *orphans, *related;
 
528
        AVLTree *installs, *removes, *orphans, *related;
540
529
        AVLNode *c, *p;
541
530
        struct package *pkg, *ppkg;
542
531
        int i, option_index, ignore_defaults = 0, show_option = 0, nokeeperfile = 0, upgrade = 0, mark_only = getuid();
548
537
        textdomain (PACKAGE);
549
538
 
550
539
        /* global trees */
551
 
        packages  = AVLInitTree(trees,   (AVLCompare)pkgcmp, (AVLFreeItem)free_package);
552
 
        keepers   = AVLInitTree(trees+1, (AVLCompare)strcasecmp, NULL);
553
 
        nokeepers = AVLInitTree(trees+2, (AVLCompare)strcasecmp, NULL);
 
540
        packages  = AVLAllocTree((AVLCompare)pkgcmp);
 
541
        keepers   = AVLAllocTree((AVLCompare)strcasecmp);
 
542
        nokeepers = AVLAllocTree((AVLCompare)strcasecmp);
554
543
 
555
544
        /* local trees */
556
 
        postpone  = AVLInitTree(trees+3, (AVLCompare)strcasecmp, NULL);
557
 
        keeplist  = AVLInitTree(trees+4, (AVLCompare)symcmp, NULL);
558
 
        installs  = AVLInitTree(trees+5, (AVLCompare)strcasecmp, NULL);
559
 
        removes   = AVLInitTree(trees+6, (AVLCompare)strcasecmp, NULL);
560
 
        orphans   = AVLInitTree(trees+7, (AVLCompare)pkgsortcmp, NULL);
561
 
        related   = AVLInitTree(trees+8, (AVLCompare)strcasecmp, NULL);
 
545
        postpone  = AVLAllocTree((AVLCompare)strcasecmp);
 
546
        keeplist  = AVLAllocTree((AVLCompare)symcmp);
 
547
        installs  = AVLAllocTree((AVLCompare)strcasecmp);
 
548
        removes   = AVLAllocTree((AVLCompare)strcasecmp);
 
549
        orphans   = AVLAllocTree((AVLCompare)pkgsortcmp);
 
550
        related   = AVLAllocTree((AVLCompare)strcasecmp);
562
551
 
563
552
        readconfig(NULL);
564
553
 
738
727
                /* Add all dependencies to install list (--upgrade) */
739
728
                if(upgrade) {
740
729
                        AVLTree install_depends;
741
 
                        AVLInitTree(&install_depends, (AVLCompare)symcmp, NULL);
 
730
                        AVLInitTree(&install_depends, (AVLCompare)symcmp);
742
731
                        for(c = installs->head; c; c = c->next)
743
732
                                if(pkg_find(c->item))
744
733
                                        all_depends(c->item, &install_depends, ECommittedAlternatives, EAllDepends);
815
804
                                        (ppkg = pkg_find(base)) && ppkg->installed) {
816
805
                                if(AVLSearch(keeplist, ppkg->name)) {
817
806
                                        add_keeplist(pkg);
818
 
                                        free(c); /* The node is unlinked so we can just delete it */
819
807
                                        continue;
820
808
                                }
821
809
                                if(AVLSearch(removes, ppkg->name)) {