lib/depends.c -
#include 'system.h'
#include 'rpmlib.h'
#include 'rpmmacro.h'
#include 'depends.h'
#include 'rpmdb.h'
#include 'debug.h'
struct badDeps_s
struct orderListIndex
typedef int(* dbrecMatch_t )(Header h, const char *reqName, const char *reqEVR, int reqFlags)
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.
void alFreeIndex (availableList al)
Destroy available item index.
void alCreate (availableList al)
Initialize available packckages, items, and directories list.
void alFree (availableList al)
Free available packages, items, and directories members.
int dirInfoCompare (const void *one, const void *two)
Compare two directory info entries by name (qsort/bsearch).
availablePackage * alAddPackage (availableList al, Header h, const void *key, FD_t fd, rpmRelocation *relocs)
Add package to available list.
int indexcmp (const void *one, const void *two)
Compare two available index entries by name (qsort/bsearch).
void alMakeIndex (availableList al)
Generate index for available list.
void parseEVR (char *evr, const char **ep, const char **vp, const char **rp)
Split EVR into epoch, version, and release components.
int rpmRangesOverlap (const char *AName, const char *AEVR, int AFlags, const char *BName, const char *BEVR, int BFlags)
int rangeMatchesDepFlags (Header h, const char *reqName, const char *reqEVR, int reqFlags)
int headerMatchesDepFlags (Header h, const char *reqName, const char *reqEVR, int reqFlags)
rpmTransactionSet rpmtransCreateSet (rpmdb rpmdb, const char *rootDir)
int intcmp (const void *a, const void *b)
Compare removed package instances (qsort/bsearch).
int removePackage (rpmTransactionSet ts, int dboffset, int depends)
Add removed package instance to ordered transaction set.
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)
int rpmtransRemovePackage (rpmTransactionSet ts, int dboffset)
rpmTransactionSet rpmtransFree (rpmTransactionSet ts)
rpmDependencyConflict rpmdepFreeConflicts (rpmDependencyConflict conflicts, int numConflicts)
availablePackage ** alAllFileSatisfiesDepend (const availableList al, const char *keyType, const char *fileName)
Check added package file lists for package(s) that provide a file.
availablePackage ** alAllSatisfiesDepend (const availableList al, const char *keyType, const char *keyDepend, const char *keyName, const char *keyEVR, int keyFlags)
Check added package file lists for package(s) that have a provide.
availablePackage * alSatisfiesDepend (const availableList al, const char *keyType, const char *keyDepend, const char *keyName, const char *keyEVR, int keyFlags)
Check added package file lists for first package that has a provide.
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.
int checkPackageDeps (rpmTransactionSet ts, problemsSet psp, Header h, const char *keyName, uint_32 multiLib)
Check header requires/conflicts against against installed+added packages.
int checkPackageSet (rpmTransactionSet ts, problemsSet psp, const char *key, rpmdbMatchIterator mi)
Check dependency against installed packages.
int checkDependentPackages (rpmTransactionSet ts, problemsSet psp, const char *key)
Erasing: check name/provides/filename key against requiredby matches.
int checkDependentConflicts (rpmTransactionSet ts, problemsSet psp, const char *key)
Adding: check name/provides key against conflicts matches.
int ignoreDep (const struct availablePackage *p, const struct availablePackage *q)
Check for dependency relations to be ignored.
void markLoop (tsortInfo tsi, struct availablePackage *q)
Recursively mark all nodes with their predecessors.
const char *const 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.
int addRelation (const rpmTransactionSet ts, struct availablePackage *p, unsigned char *selected, int j)
Record next 'q <- p' relation (i.e.
int orderListIndexCmp (const void *one, const void *two)
Compare ordered list entries by index (qsort/bsearch).
void addQ (struct availablePackage *p, struct availablePackage **qp, struct availablePackage **rp)
Add element to list sorting by initial successor count.
int rpmdepOrder (rpmTransactionSet ts)
int rpmdbCloseDBI (rpmdb db, int rpmtag)
Close a single database index.
int rpmdepCheck (rpmTransactionSet ts, rpmDependencyConflict *conflicts, int *numConflicts)
int _depends_debug = 0
int _cacheDependsRC = 1
const char * rpmNAME = PACKAGE
const char * rpmEVR = VERSION
int rpmFLAGS = RPMSENSE_EQUAL
badDeps_s * badDeps = NULL
Definition at line 606 of file depends.c.
Add element to list sorting by initial successor count.
Parameters:
Return values:
Definition at line 1884 of file depends.c.
References availablePackage::tsi, tsortInfo_s::tsi_qcnt, and tsortInfo_s::tsi_reqx.
Record next 'q <- p' relation (i.e.
Parameters:
Returns: 0 always
Definition at line 1818 of file depends.c.
References alSatisfiesDepend(), availablePackage::depth, ignoreDep(), availablePackage::tsi, tsortInfo_s::tsi_next, tsortInfo_s::tsi_qcnt, and xmalloc().
Add package to available list.
Parameters:
Returns: available package pointer
Definition at line 241 of file depends.c.
References alFreeIndex(), alloca(), availablePackage::baseNames, availablePackage::depth, dirInfoCompare(), dirInfo_s::dirName, dirInfo_s::dirNameLen, availablePackage::epoch, availablePackage::fd, fdLink, availablePackage::filesCount, availablePackage::h, headerLink(), headerNVR(), HFD_t, HGE_t, int_32, availablePackage::key, availablePackage::multiLib, availablePackage::name, rpmRelocation_s::newPath, availablePackage::npreds, rpmRelocation_s::oldPath, availablePackage::provideFlags, availablePackage::provides, availablePackage::providesCount, availablePackage::providesEVR, availablePackage::release, availablePackage::relocs, availablePackage::requireFlags, availablePackage::requires, availablePackage::requiresCount, availablePackage::requiresEVR, RPMTAG_BASENAMES, RPMTAG_DIRINDEXES, RPMTAG_DIRNAMES, RPMTAG_EPOCH, RPMTAG_FILEFLAGS, RPMTAG_MULTILIBS, RPMTAG_PROVIDEFLAGS, RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, rpmTagType, rpmVersionCompare(), availablePackage::tsi, uint_32, availablePackage::version, xmalloc(), xrealloc(), and xstrdup().
Referenced by rpmtransAddPackage(), and rpmtransAvailablePackage().
Check added package file lists for package(s) that provide a file.
Parameters:
Returns: available package pointer
Definition at line 963 of file depends.c.
References _, _free(), dirInfoCompare(), dirInfo_s::dirName, dirInfo_s::dirNameLen, isFileMULTILIB, availablePackage::multiLib, RPMMESS_DEBUG, rpmMessage, xrealloc(), and xstrdup().
Referenced by alAllSatisfiesDepend().
Check added package file lists for package(s) that have a provide.
Parameters:
Returns: available package pointer
Definition at line 1078 of file depends.c.
References _, alAllFileSatisfiesDepend(), availableIndexEntry::entry, availableIndexEntry::entryIx, availableIndexEntry::entryLen, indexcmp(), availableIndexEntry::package, availablePackage::provideFlags, availablePackage::provides, availablePackage::providesEVR, RPMMESS_DEBUG, rpmMessage, rpmRangesOverlap(), availableIndexEntry::type, and xrealloc().
Referenced by alSatisfiesDepend(), and unsatisfiedDepend().
Initialize available packckages, items, and directories list.
Parameters:
Definition at line 144 of file depends.c.
References xcalloc().
Referenced by rpmtransCreateSet().
Free available packages, items, and directories members.
Parameters:
Definition at line 162 of file depends.c.
References _free(), alFreeIndex(), availablePackage::baseNames, availablePackage::fd, fdFree, availablePackage::h, headerFree(), HFD_t, availablePackage::provides, availablePackage::providesEVR, availablePackage::relocs, availablePackage::requires, availablePackage::requiresEVR, availablePackage::tsi, and tsortInfo_s::tsi_next.
Destroy available item index.
Parameters:
Definition at line 131 of file depends.c.
References _free().
Referenced by alAddPackage(), and alFree().
Generate index for available list.
Parameters:
Definition at line 444 of file depends.c.
References availableIndexEntry::entry, availableIndexEntry::entryIx, availableIndexEntry::entryLen, availableIndex::index, indexcmp(), isDependsMULTILIB, availablePackage::multiLib, availableIndexEntry::package, availablePackage::provideFlags, availablePackage::provides, availablePackage::providesCount, availableIndex::size, availableIndexEntry::type, and xcalloc().
Referenced by rpmdepCheck(), and rpmdepOrder().
Check added package file lists for first package that has a provide.
Todo: Eliminate.
Parameters:
Returns: available package pointer
Definition at line 1159 of file depends.c.
References _free(), and alAllSatisfiesDepend().
Referenced by addRelation(), and unsatisfiedDepend().
Adding: check name/provides key against conflicts matches.
Parameters:
Returns: 0 no problems found
Definition at line 1599 of file depends.c.
References checkPackageSet(), rpmdbInitIterator(), and RPMTAG_CONFLICTNAME.
Erasing: check name/provides/filename key against requiredby matches.
Parameters:
Returns: 0 no problems found
Definition at line 1583 of file depends.c.
References checkPackageSet(), rpmdbInitIterator(), and RPMTAG_REQUIRENAME.
Check header requires/conflicts against against installed+added packages.
Parameters:
Returns: 0 no problems found
Definition at line 1371 of file depends.c.
References _, _free(), rpmDependencyConflict_s::byHeader, rpmDependencyConflict_s::byName, rpmDependencyConflict_s::byRelease, rpmDependencyConflict_s::byVersion, headerLink(), headerNVR(), HFD_t, HGE_t, int_32, isDependsMULTILIB, availablePackage::key, rpmDependencyConflict_s::needsFlags, rpmDependencyConflict_s::needsName, rpmDependencyConflict_s::needsVersion, printDepend(), RPM_STRING_ARRAY_TYPE, RPMMESS_DEBUG, rpmMessage, RPMTAG_CONFLICTFLAGS, RPMTAG_CONFLICTNAME, RPMTAG_CONFLICTVERSION, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, rpmTagType, rpmDependencyConflict_s::sense, rpmDependencyConflict_s::suggestedPackages, uint_32, unsatisfiedDepend(), xmalloc(), xrealloc(), and xstrdup().
Referenced by checkPackageSet(), and rpmdepCheck().
Check dependency against installed packages.
Adding: check name/provides key against each conflict match, Erasing: check name/provides/filename key against each requiredby match.
Parameters:
Returns: 0 no problems found
Definition at line 1556 of file depends.c.
References checkPackageDeps(), rpmdbFreeIterator(), rpmdbNextIterator(), and rpmdbPruneIterator().
Referenced by checkDependentConflicts(), and checkDependentPackages().
Compare two directory info entries by name (qsort/bsearch).
Parameters:
Returns: result of comparison
Definition at line 218 of file depends.c.
References dirInfo_s::dirName, and dirInfo_s::dirNameLen.
Referenced by alAddPackage(), and alAllFileSatisfiesDepend().
Definition at line 1728 of file depends.c.
References _notpre, int_32, isLegacyPreReq, RPMSENSE_FIND_REQUIRES, RPMSENSE_SCRIPT_POST, RPMSENSE_SCRIPT_POSTUN, RPMSENSE_SCRIPT_PRE, RPMSENSE_SCRIPT_PREUN, and RPMSENSE_SCRIPT_VERIFY.
Check for dependency relations to be ignored.
Parameters:
Returns: 1 if dependency is to be ignored.
Definition at line 1659 of file depends.c.
References _, _free(), badDeps_s::pname, badDeps_s::qname, rpmExpand(), RPMMESS_DEBUG, rpmMessage, xcalloc(), and xstrdup().
Compare two available index entries by name (qsort/bsearch).
Parameters:
Returns: result of comparison
Definition at line 428 of file depends.c.
References availableIndexEntry::entry, and availableIndexEntry::entryLen.
Referenced by alAllSatisfiesDepend(), and alMakeIndex().
Compare removed package instances (qsort/bsearch).
Parameters:
Returns: result of comparison
Definition at line 748 of file depends.c.
Referenced by removePackage().
Recursively mark all nodes with their predecessors.
Parameters:
Definition at line 1711 of file depends.c.
References availablePackage::tsi, tsortInfo_s::tsi_next, and tsortInfo_s::tsi_pkg.
Compare ordered list entries by index (qsort/bsearch).
Parameters:
Returns: result of comparison
Definition at line 1871 of file depends.c.
Split EVR into epoch, version, and release components.
Parameters:
Return values:
Definition at line 489 of file depends.c.
References xisdigit().
Referenced by rpmRangesOverlap().
Return formatted dependency string.
Parameters:
Returns: formatted dependency (malloc'ed)
Definition at line 62 of file depends.c.
References RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_SENSEMASK, and xmalloc().
Referenced by checkPackageDeps(), rpmRangesOverlap(), and zapRelation().
Definition at line 609 of file depends.c.
References HFD_t, HGE_t, int_32, rpmRangesOverlap(), RPMSENSE_SENSEMASK, RPMTAG_PROVIDEFLAGS, RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, and rpmTagType.
Referenced by unsatisfiedDepend().
Add removed package instance to ordered transaction set.
Parameters:
Returns: 0 on success
Definition at line 763 of file depends.c.
References intcmp(), and xrealloc().
Referenced by rpmtransAddPackage(), and rpmtransRemovePackage().
Close a single database index.
Parameters:
Returns: 0 on success
Definition at line 2231 of file depends.c.
References dbiClose().
Check key for an unsatisfied dependency.
Todo: Eliminate rpmrc provides.
Parameters:
Return values:
Returns: 0 if satisfied, 1 if not satisfied, 2 if error
Definition at line 1188 of file depends.c.
References _, _cacheDependsRC, alAllSatisfiesDepend(), alSatisfiesDepend(), DBC, DBI_WRITECURSOR, dbiCclose(), dbiCopen(), dbiGet(), dbiOpen(), dbiPut(), rangeMatchesDepFlags(), rpmCheckRpmlibProvides(), rpmdbFreeIterator(), RPMDBI_DEPENDS, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbPruneIterator(), rpmGetVar(), RPMMESS_DEBUG, rpmMessage, RPMSENSE_SENSEMASK, RPMTAG_BASENAMES, RPMTAG_NAME, RPMTAG_PROVIDENAME, RPMVAR_PROVIDES, and xisspace().
Referenced by checkPackageDeps().
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:
Return values:
Returns: (possibly NULL) formatted 'q <- p' releation (malloc'ed)
Definition at line 1760 of file depends.c.
References _, _free(), identifyDepend(), printDepend(), RPMMESS_DEBUG, rpmMessage, RPMSENSE_PREREQ, tsortInfo_s::tsi_next, and tsortInfo_s::tsi_reqx.
Definition at line 29 of file depends.c.
Referenced by unsatisfiedDepend().
Definition at line 6 of file depends.c.
Definition at line 1649 of file depends.c.
Definition at line 526 of file depends.c.
Definition at line 527 of file depends.c.
Definition at line 525 of file depends.c.
Generated automatically by Doxygen for rpm from the source code.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |