Main Page   Modules   Compound List   File List   Compound Members   File Members   Related Pages  

lib/depends.c File Reference

More...

#include "system.h"
#include <rpmlib.h>
#include "depends.h"
#include "rpmdb.h"
#include "misc.h"
#include "debug.h"

Go to the source code of this file.

Compounds

struct  badDeps_s
struct  orderListIndex

RPMTS

int rpmRangesOverlap (const char *AName, const char *AEVR, int AFlags, const char *BName, const char *BEVR, int BFlags)
rpmTransactionSet rpmtransCreateSet (rpmdb rpmdb, const char * rootDir)
int rpmtransAddPackage (rpmTransactionSet ts, Header h, FD_t fd, const void * key, int upgrade, rpmRelocation * relocs)
void rpmtransAvailablePackage (rpmTransactionSet ts, Header h, const void * key)
void rpmtransRemovePackage (rpmTransactionSet ts, int dboffset)
void rpmtransFree (rpmTransactionSet ts)
void rpmdepFreeConflicts (struct rpmDependencyConflict * conflicts, int numConflicts)
int rpmdepOrder (rpmTransactionSet ts)
int rpmdepCheck (rpmTransactionSet ts, struct rpmDependencyConflict ** conflicts, int * numConflicts)

Defines

#define DEPENDENCY_WHITEOUT

Typedefs

typedef int (* dbrecMatch_t )(Header h, const char *reqName, const char * reqEVR, int reqFlags)

Functions

int headerNVR (Header h, const char **np, const char **vp, const char **rp)
char* printDepend (const char * depend, const char * key, const char * keyEVR, int keyFlags)
 Return formatted dependency string. More...

void alFreeIndex (struct availableList * al)
 Destroy available item index. More...

void alCreate (struct availableList * al)
 Initialize available packckages, items, and directories list. More...

void alFree (struct availableList * al)
 Free available packages, items, and directories members. More...

int dirInfoCompare (const void * one, const void * two)
 Compare two directory info entries by name (qsort/bsearch). More...

struct availablePackagealAddPackage (struct availableList * al, Header h, const void * key, FD_t fd, rpmRelocation * relocs)
 Add package to available list. More...

int indexcmp (const void * one, const void * two)
 Compare two available index entries by name (qsort/bsearch). More...

void alMakeIndex (struct availableList * al)
 Generate index for available list. More...

int intcmp (const void * a, const void *b)
 Compare removed package instances (qsort/bsearch). More...

void parseEVR (char *evr, const char **ep, const char **vp, const char **rp)
 Split EVR into epoch, version, and release components. More...

int rangeMatchesDepFlags (Header h, const char *reqName, const char * reqEVR, int reqFlags)
int headerMatchesDepFlags (Header h, const char * reqName, const char * reqEVR, int reqFlags)
 Compare package name-version-release from header with dependency, looking for overlap. More...

void removePackage (rpmTransactionSet ts, int dboffset, int depends)
 Add removed package instance to ordered transaction set. More...

struct availablePackagealFileSatisfiesDepend (struct availableList * al, const char * keyType, const char * fileName)
 Check added package file lists for a file. More...

struct availablePackagealSatisfiesDepend ( struct availableList * al, const char * keyType, const char * keyDepend, const char * keyName, const char * keyEVR, int keyFlags)
 Check added package file lists for a provide. More...

int unsatisfiedDepend (rpmTransactionSet ts, const char * keyType, const char * keyDepend, const char * keyName, const char * keyEVR, int keyFlags, struct availablePackage ** suggestion)
 Check key for an unsatisfied dependency. More...

int checkPackageDeps (rpmTransactionSet ts, struct problemsSet * psp, Header h, const char * keyName, uint_32 multiLib)
int checkPackageSet (rpmTransactionSet ts, struct problemsSet * psp, const char * key, rpmdbMatchIterator mi)
 Adding: check name/provides key against each conflict match, Erasing: check name/provides/filename key against each requiredby match. More...

int checkDependentPackages (rpmTransactionSet ts, struct problemsSet * psp, const char * key)
 Erasing: check name/provides/filename key against requiredby matches. More...

int checkDependentConflicts (rpmTransactionSet ts, struct problemsSet * psp, const char * key)
 Adding: check name/provides key against conflicts matches. More...

int ignoreDep (struct availablePackage * p, struct availablePackage * q)
void markLoop (struct tsortInfo * tsi, struct availablePackage * q)
 Recursively mark all nodes with their predecessors. More...

const char* identifyDepend (int_32 f)
const char* zapRelation (struct availablePackage * q, struct availablePackage * p, int zap, int * nzaps)
 Find (and eliminate co-requisites) "q <- p" relation in dependency loop. More...

int addRelation ( const rpmTransactionSet ts, struct availablePackage * p, unsigned char * selected, int j)
 Record next "q <- p" relation (i.e. More...

int orderListIndexCmp (const void * one, const void * two)
 Compare ordered list entries by index (qsort/bsearch). More...

void addQ (struct availablePackage * p, struct availablePackage ** qp, struct availablePackage ** rp)
 Add element to list sorting by initial successor count. More...


Variables

int _depends_debug = 0
struct badDeps_s  badDeps []


Detailed Description

Definition in file depends.c.


Define Documentation

#define DEPENDENCY_WHITEOUT
 

Definition at line 1399 of file depends.c.


Typedef Documentation

typedef int (* dbrecMatch_t)(Header h, const char *reqName, const char * reqEVR, int reqFlags)
 

Definition at line 600 of file depends.c.


Function Documentation

void addQ ( struct availablePackage * p,
struct availablePackage ** qp,
struct availablePackage ** rp ) [static]
 

Add element to list sorting by initial successor count.

Parameters:
p   new element
Return values:
qp   address of first element
rp   address of last element

Definition at line 1607 of file depends.c.

int addRelation ( const rpmTransactionSet ts,
struct availablePackage * p,
unsigned char * selected,
int j ) [inline, static]
 

Record next "q <- p" relation (i.e.

"p" requires "q").

Parameters:
ts   transaction set
p   predecessor (i.e. package that "Requires: q")
selected   boolean package selected array
j   relation index
Returns:
0 always

Definition at line 1546 of file depends.c.

struct availablePackage * alAddPackage ( struct availableList * al,
Header h,
const void * key,
FD_t fd,
rpmRelocation * relocs ) [static]
 

Add package to available list.

Parameters:
al   available list
h   package header
key   package private data
fd   package file handle
relocs   package file relocations
Returns:
available package pointer

Definition at line 229 of file depends.c.

Referenced by rpmtransAddPackage(), and rpmtransAvailablePackage().

void alCreate ( struct availableList * al ) [static]
 

Initialize available packckages, items, and directories list.

Parameters:
al   available list

Definition at line 134 of file depends.c.

Referenced by rpmtransCreateSet().

struct availablePackage * alFileSatisfiesDepend ( struct availableList * al,
const char * keyType,
const char * fileName ) [static]
 

Check added package file lists for a file.

Parameters:
al   available list
keyType   type of dependency
fileName   file name to search for
Returns:
available package pointer

Definition at line 910 of file depends.c.

void alFree ( struct availableList * al ) [static]
 

Free available packages, items, and directories members.

Parameters:
al   available list

Definition at line 152 of file depends.c.

Referenced by rpmtransFree().

void alFreeIndex ( struct availableList * al ) [static]
 

Destroy available item index.

Parameters:
al   available list

Definition at line 119 of file depends.c.

void alMakeIndex ( struct availableList * al ) [static]
 

Generate index for available list.

Parameters:
al   available list

Definition at line 427 of file depends.c.

struct availablePackage * alSatisfiesDepend ( struct availableList * al,
const char * keyType,
const char * keyDepend,
const char * keyName,
const char * keyEVR,
int keyFlags ) [static]
 

Check added package file lists for a provide.

Parameters:
al   available list
keyType   type of dependency
keyDepend   dependency string representation
keyName   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Returns:
available package pointer

Definition at line 968 of file depends.c.

Referenced by addRelation().

int checkDependentConflicts ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key ) [static]
 

Adding: check name/provides key against conflicts matches.

Definition at line 1381 of file depends.c.

int checkDependentPackages ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key ) [static]
 

Erasing: check name/provides/filename key against requiredby matches.

Definition at line 1370 of file depends.c.

int checkPackageDeps ( rpmTransactionSet ts,
struct problemsSet * psp,
Header h,
const char * keyName,
uint_32 multiLib ) [static]
 

Definition at line 1190 of file depends.c.

int checkPackageSet ( rpmTransactionSet ts,
struct problemsSet * psp,
const char * key,
rpmdbMatchIterator mi ) [static]
 

Adding: check name/provides key against each conflict match, Erasing: check name/provides/filename key against each requiredby match.

Definition at line 1349 of file depends.c.

int dirInfoCompare ( const void * one,
const void * two ) [static]
 

Compare two directory info entries by name (qsort/bsearch).

Parameters:
one   1st directory info
two   2nd directory info
Returns:
result of comparison

Definition at line 207 of file depends.c.

int headerMatchesDepFlags ( Header h,
const char * reqName,
const char * reqEVR,
int reqFlags )
 

Compare package name-version-release from header with dependency, looking for overlap.

Deprecated:
Remove from API when obsoletes is correctly eliminated.
Parameters:
h   header
reqName   dependency name
reqEVR   dependency [epoch:]version[-release]
reqFlags   dependency logical range qualifiers
Returns:
1 if dependency overlaps, 0 otherwise

Definition at line 654 of file depends.c.

Referenced by problemsSet::alloced(), handleOneTrigger(), and rpmtransAddPackage().

const char * identifyDepend ( int_32 f ) [inline, static]
 

Definition at line 1459 of file depends.c.

Referenced by zapRelation().

int ignoreDep ( struct availablePackage * p,
struct availablePackage * q ) [static]
 

Definition at line 1428 of file depends.c.

int indexcmp ( const void * one,
const void * two ) [static]
 

Compare two available index entries by name (qsort/bsearch).

Parameters:
one   1st available index entry
two   2nd available index entry
Returns:
result of comparison

Definition at line 411 of file depends.c.

int intcmp ( const void * a,
const void * b ) [static]
 

Compare removed package instances (qsort/bsearch).

Parameters:
a   1st instance address
b   2nd instance address
Returns:
result of comparison

Definition at line 470 of file depends.c.

void markLoop ( struct tsortInfo * tsi,
struct availablePackage * q ) [static]
 

Recursively mark all nodes with their predecessors.

Parameters:
tsi   successor chain
q   predecessor

Definition at line 1445 of file depends.c.

int orderListIndexCmp ( const void * one,
const void * two ) [static]
 

Compare ordered list entries by index (qsort/bsearch).

Parameters:
a   1st ordered list entry
b   2nd ordered list entry
Returns:
result of comparison

Definition at line 1594 of file depends.c.

void parseEVR ( char * evr,
const char ** ep,
const char ** vp,
const char ** rp ) [static]
 

Split EVR into epoch, version, and release components.

Parameters:
evr   [epoch:]version[-release] string
Return values:
ep   pointer to epoch
vp   pointer to version
rp   pointer to release

Definition at line 485 of file depends.c.

char * printDepend ( const char * depend,
const char * key,
const char * keyEVR,
int keyFlags ) [static]
 

Return formatted dependency string.

Parameters:
depend   type of dependency ("R" == Requires, "C" == Conflcts)
key   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Returns:
formatted dependency (malloc'ed)

Definition at line 51 of file depends.c.

Referenced by zapRelation().

int rangeMatchesDepFlags ( Header h,
const char * reqName,
const char * reqEVR,
int reqFlags ) [static]
 

Definition at line 602 of file depends.c.

void removePackage ( rpmTransactionSet ts,
int dboffset,
int depends ) [static]
 

Add removed package instance to ordered transaction set.

Parameters:
ts   transaction set
dboffset   rpm database instance
depends   installed package of pair (or -1 on erase)

Definition at line 732 of file depends.c.

Referenced by rpmtransAddPackage(), and rpmtransRemovePackage().

int unsatisfiedDepend ( rpmTransactionSet ts,
const char * keyType,
const char * keyDepend,
const char * keyName,
const char * keyEVR,
int keyFlags,
struct availablePackage ** suggestion ) [static]
 

Check key for an unsatisfied dependency.

Parameters:
al   available list
keyType   type of dependency
keyDepend   dependency string representation
keyName   dependency name string
keyEVR   dependency [epoch:]version[-release] string
keyFlags   dependency logical range qualifiers
Return values:
suggestion   possible package to resolve dependency
Returns:
0 if satisfied, 1 if not satisfied, 2 if error

Definition at line 1030 of file depends.c.

const char * zapRelation ( struct availablePackage * q,
struct availablePackage * p,
int zap,
int * nzaps ) [static]
 

Find (and eliminate co-requisites) "q <- p" relation in dependency loop.

Search all successors of q for instance of p. Format the specific relation, (e.g. p contains "Requires: q"). Unlink and free co-requisite (i.e. pure Requires: dependencies) successor node(s).

Parameters:
q   sucessor (i.e. package required by p)
p   predecessor (i.e. package that "Requires: q")
zap   max. no. of co-requisites to remove (-1 is all)?
Return values:
nzaps   address of no. of relations removed
Returns:
(possibly NULL) formatted "q <- p" releation (malloc'ed)

Definition at line 1490 of file depends.c.


Variable Documentation

int _depends_debug = 0
 

Definition at line 5 of file depends.c.

struct badDeps_s badDeps[] [static]
 


Generated at Sun Apr 8 18:43:03 2001 for rpm by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000