# RPMDS Dependency Set API.

## Files

file | rpmdpkg.c
file | rpmdpkg.h
| Structure(s) and routine(s) used for dpkg EVR parsing and comparison.

file | rpmds.c
file | rpmds.h
| Structure(s) used for dependency tag sets.

file | rpmevr.c
file | rpmevr.h
| Structure(s) and routine(s) used for EVR parsing and comparison.

file | rpmlib.h
| In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.

file | rpmns.c
file | rpmns.h
| Structure(s) and routine(s) used for classifying and parsing names.

## Typedefs

typedef struct rpmds_s * | rpmds
| Dependency tag sets from a header, so that a header can be discarded early.
typedef struct rpmPRCO_s * | rpmPRCO
| Container for commonly extracted dependency set(s).

## Functions

int | dpkgEVRcmp (const char *a, const char *b)
| Segmented string compare.
int | dpkgEVRparse (const char *evrstr, EVR_t evr)
| Split EVR string into epoch, version, and release components.
int | dpkgEVRcompare (const EVR_t a, const EVR_t b)
| Compare EVR containers.
int | rpmEVRcmp (const char *a, const char *b)
| Segmented string compare.
int | rpmEVRparse (const char *evrstr, EVR_t evr)
| Split EVR string into epoch, version, and release components.
int | rpmEVRcompare (const EVR_t a, const EVR_t b)
| Compare EVR containers.
nsType | rpmnsArch (const char *str)
| Is string a known arch suffix?
nsType | rpmnsProbe (const char *str)
| Is string a known probe namespace?
nsType | rpmnsClassify (const char *str)
| Classify a string as a dependency type.
int | rpmnsParse (const char *str, rpmns ns)
| Split NS string into namespace, name and arch components.

## Variables

int | _rpmds_debug
const char * | _sysinfo_path
int | _rpmds_nopromote
int(* | rpmvercmp )(const char *a, const char *b)
| Segmented string compare vector.

## RPMDS

rpmds | rpmdsUnlink (rpmds ds, const char *msg)
| Unreference a dependency set instance.
rpmds | rpmdsLink (rpmds ds, const char *msg)
| Reference a dependency set instance.
rpmds | rpmdsFree (rpmds ds)
| Destroy a dependency set.
rpmds | rpmdsNew (Header h, rpmTag tagN, int flags)
| Create and load a dependency set.
const char * | rpmdsNewN (rpmds ds)
| Return N string, expanded if necessary.
char * | rpmdsNewDNEVR (const char *dspfx, rpmds ds)
| Return new formatted dependency string.
rpmds | rpmdsThis (Header h, rpmTag tagN, evrFlags Flags)
| Create, load and initialize a dependency for this header.
rpmds | rpmdsSingle (rpmTag tagN, const char *N, const char *EVR, evrFlags Flags)
| Create, load and initialize a dependency set of size 1.
int | rpmdsCount (const rpmds ds)
| Return dependency set count.
int | rpmdsIx (const rpmds ds)
| Return dependency set index.
int | rpmdsSetIx (rpmds ds, int ix)
| Set dependency set index.
const char * | rpmdsDNEVR (const rpmds ds)
| Return current formatted dependency string.
const char * | rpmdsN (rpmds ds)
| Return current dependency name.
const char * | rpmdsEVR (const rpmds ds)
| Return current dependency epoch-version-release.
evrFlags | rpmdsFlags (const rpmds ds)
| Return current dependency flags.
rpmTag | rpmdsTagN (const rpmds ds)
| Return current dependency type.
const char * | rpmdsA (const rpmds ds)
| Return current dependency arch.
time_t | rpmdsBT (const rpmds ds)
| Return dependency build time.
time_t | rpmdsSetBT (const rpmds ds, time_t BT)
| Set dependency build time.
nsType | rpmdsNSType (const rpmds ds)
| Return dependency class type.
int | rpmdsNoPromote (const rpmds ds)
| Return current "Don't promote Epoch:" flag.
int | rpmdsSetNoPromote (rpmds ds, int nopromote)
| Set "Don't promote Epoch:" flag.
void * | rpmdsSetEVRparse (rpmds ds, int(*EVRparse)(const char *everstr, EVR_t evr))
| Set EVR parsing function.
void * | rpmdsSetEVRcmp (rpmds ds, int(*EVRcmp)(const char *a, const char *b))
| Set EVR comparison function.
uint32_t | rpmdsColor (const rpmds ds)
| Return current dependency color.
uint32_t | rpmdsSetColor (const rpmds ds, uint32_t color)
| Set current dependency color.
uint32_t | rpmdsRefs (const rpmds ds)
| Return current dependency file refs.
uint32_t | rpmdsSetRefs (const rpmds ds, uint32_t refs)
| Set current dependency file refs.
int32_t | rpmdsResult (const rpmds ds)
| Return current dependency comparison result.
int32_t | rpmdsSetResult (const rpmds ds, int32_t result)
| Set current dependency comparison result.
void | rpmdsNotify (rpmds ds, const char *where, int rc)
| Notify of results of dependency match.
int | rpmdsNext (rpmds ds)
| Return next dependency set iterator index.
rpmds | rpmdsInit (rpmds ds)
| Initialize dependency set iterator.
int | rpmdsFind (rpmds ds, const rpmds ods)
| Find a dependency set element using binary search.
int | rpmdsMerge (rpmds *dsp, rpmds ods)
| Merge a dependency set maintaining (N,EVR,Flags) sorted order.
int | rpmdsSearch (rpmds ds, rpmds ods)
| Search a sorted dependency set for an element that overlaps.
int | rpmdsCpuinfo (rpmds *dsp, const char *fn)
| Load /proc/cpuinfo provides into a dependency set.
int | rpmdsRpmlib (rpmds *dsp, void *tblp)
| Load rpmlib provides into a dependency set.
int | rpmdsSysinfo (rpmPRCO PRCO, const char *fn)
| Load sysinfo dependencies into a dependency set.
int | rpmdsGetconf (rpmds *dsp, const char *path)
| Load getconf provides into a dependency set.
int | rpmdsMergePRCO (void *context, rpmds ds)
| Merge provides/requires/conflicts/obsoletes dependencies.
rpmPRCO | rpmdsFreePRCO (rpmPRCO PRCO)
| Free dependency set(s) container.
rpmPRCO | rpmdsNewPRCO (Header h)
| Create dependency set(s) container.
rpmds | rpmdsFromPRCO (rpmPRCO PRCO, rpmTag tagN)
| Retrieve a dependency set from container.
int | rpmdsELF (const char *fn, int flags, int(*add)(void *context, rpmds ds), void *context)
| Extract ELF dependencies from a file.
int | rpmdsLdconfig (rpmPRCO PRCO, const char *fn)
| Load /etc/ld.so.cache provides into a dependency set.
int | rpmdsPipe (rpmds *dsp, rpmTag tagN, const char *cmd)
| Load provides from a pipe into a dependency set.
int | rpmdsCompare (const rpmds A, const rpmds B)
| Compare two versioned dependency ranges, looking for overlap.
void | rpmdsProblem (rpmps ps, const char *pkgNEVR, const rpmds ds, const fnpyKey *suggestedKeys, int adding)
| Report a Requires: or Conflicts: dependency problem.
int | rpmdsAnyMatchesDep (const Header h, const rpmds req, int nopromote)
| Compare package provides dependencies from header with a single dependency.
int | rpmdsNVRMatchesDep (const Header h, const rpmds req, int nopromote)
| Compare package name-version-release from header with a single dependency.
int | rpmdsNegateRC (const rpmds ds, int rc)
| Negate return code for negated comparisons.
static const char * | rpmdsTagName (const rpmds ds)
| Return current dependency type name.
static int | rpmdsPrint (rpmds ds, FILE *fp)
| Print current dependency set contents.
static int | rpmdsPrintResults (rpmds ds, FILE *fp)
| Print current dependency set results.
static int | rpmdsPrintClosure (rpmds P, rpmds R, FILE *fp)
| Check Provides: against Requires: and print closure results.

## Typedef Documentation

typedef struct rpmds_s* rpmds

Dependency tag sets from a header, so that a header can be discarded early.

Definition at line 84 of file rpmlib.h.

typedef struct rpmPRCO_s* rpmPRCO

Container for commonly extracted dependency set(s).

Definition at line 89 of file rpmlib.h.

## Function Documentation

int dpkgEVRcmp | ( | const char * | a,
|  | const char * | b |
| ) |  |  |

Segmented string compare.

Parameters:

  | a | 1st string
  | b | 2nd string

Returns:
  +1 if a is "newer", 0 if equal, -1 if b is "newer"

Definition at line 31 of file rpmdpkg.c.

References dpkgEVRctype(), and xisdigit().

Referenced by dpkgEVRcompare().

int dpkgEVRcompare | ( | const EVR_t | a,
|  | const EVR_t | b |
| ) |  |  |

Compare EVR containers.

Parameters:

  | a | 1st EVR container
  | b | 2nd EVR container

Returns:
  +1 if a is "newer", 0 if equal, -1 if b is "newer"

Definition at line 64 of file rpmdpkg.c.

References dpkgEVRcmp().

int dpkgEVRparse | ( | const char * | evrstr,
|  | EVR_t | evr |
| ) |  |  |

Split EVR string into epoch, version, and release components.

Parameters:

  | evrstr | [epoch:]version[-release] string

Return values:

  | *evr | parse results

Returns:
  0 always

Definition at line 59 of file rpmdpkg.c.

References rpmEVRparse().

const char* rpmdsA | ( | const rpmds | ds | ) |

Return current dependency arch.

Parameters:

  | ds | dependency set

Returns:
  current dependency arch, NULL on invalid

Definition at line 690 of file rpmds.c.

int rpmdsAnyMatchesDep | ( | const Header | h,
|  | const rpmds | req,
|  | int | nopromote |
| ) |  |  |

Compare package provides dependencies from header with a single dependency.

Parameters:

  | h | header
  | req | dependency set
  | nopromote | Don't promote Epoch: in comparison?

Returns:
  1 if any dependency overlaps, 0 otherwise

Definition at line 3661 of file rpmds.c.

References rpmdsCompare(), rpmdsFlags(), rpmdsFree(), rpmdsInit(), rpmdsNew(), rpmdsNext(), rpmdsSetNoPromote(), RPMNS_TYPE_ARCH, and RPMSENSE_SENSEMASK.

Referenced by handleOneTrigger(), rpmtsAddInstallElement(), rpmtsSolve(), and unsatisfiedDepend().

time_t rpmdsBT | ( | const rpmds | ds | ) |

Return dependency build time.

Parameters:

  | ds | dependency set

Returns:
  dependency build time, 0 on invalid

Definition at line 699 of file rpmds.c.

Referenced by rpmds_BT().

uint32_t rpmdsColor | ( | const rpmds | ds | ) |

Return current dependency color.

Parameters:

  | ds | dependency set

Returns:
  current dependency color (0 if not set)

Definition at line 768 of file rpmds.c.

Referenced by checkPackageDeps(), rpmalAddProvides(), rpmds_Color(), and rpmtsAddInstallElement().

int rpmdsCompare | ( | const rpmds | A,
|  | const rpmds | B |
| ) |  |  |

Compare two versioned dependency ranges, looking for overlap.

Parameters:

  | A | 1st dependency
  | B | 2nd dependency

Returns:
  1 if dependencies overlap, 0 otherwise

Definition at line 3543 of file rpmds.c.

References _, _free(), alloca(), rpmdsFlags(), rpmdsNAcmp(), rpmEVRparse(), rpmlog(), RPMLOG_DEBUG, RPMLOG_WARNING, RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_NOTEQUAL, RPMSENSE_SENSEMASK, rpmvercmp, and xstrdup().

Referenced by rpmalAllSatisfiesDepend(), rpmds_richcompare(), rpmdsAnyMatchesDep(), rpmdsNVRMatchesDep(), rpmdsSearch(), rpmHeadersIdentical(), and rpmtsAddInstallElement().

int rpmdsCount | ( | const rpmds | ds | ) |

Return dependency set count.

Parameters:

  | ds | dependency set

Returns:
  current count

Definition at line 615 of file rpmds.c.

Referenced by main(), rpmalMakeIndex(), rpmds_Count(), rpmds_length(), rpmfcGenerateDepends(), rpmfcPrint(), and rpmteColorDS().

int rpmdsCpuinfo | ( | rpmds * | dsp,
|  | const char * | fn |
| ) |  |  |

Load /proc/cpuinfo provides into a dependency set.

Return values:

  | *dsp | (loaded) depedency set

Parameters:

  | fn | path to file (NULL uses /proc/cpuinfo)

Returns:
  0 on success

Definition at line 1217 of file rpmds.c.

References _free(), _isspace, _PROC_CPUINFO, cpuinfo_s::done, Fclose(), fdGetFILE, Ferror(), Fopen(), cpuinfo_s::name, rpmdsCpuinfoCtagFlags(), rpmdsNSAdd(), rpmExpand(), RPMSENSE_EQUAL, and xstrdup().

Referenced by main(), rpmds_Cpuinfo(), rpmShowRC(), and unsatisfiedDepend().

const char* rpmdsDNEVR | ( | const rpmds | ds | ) |

Return current formatted dependency string.

Parameters:

  | ds | dependency set

Returns:
  current dependency DNEVR, NULL on invalid

Definition at line 636 of file rpmds.c.

Referenced by missingokTag(), printDeps(), rpmdepPrint(), rpmds_DNEVR(), rpmds_print(), rpmds_subscript(), rpmdsPrint(), rpmdsPrintResults(), rpmdsProblem(), rpmfcPrint(), rpmfiBuildFDeps(), rpmShowRC(), rpmts_SolveCallback(), rpmtsAddInstallElement(), and unsatisfiedDepend().

int rpmdsELF | ( | const char * | fn,
|  | int | flags,
|  | int(*)(void *context, rpmds ds) | add,
|  | void * | context |
| ) |  |  |

Extract ELF dependencies from a file.

Parameters:

  | fn | file name
  | flags | 1: skip provides 2: skip requires
  | *add | add(arg, ds) saves next provide/require elf dependency.
  | context | add() callback context

Returns:
  0 on success

Extract ELF dependencies from a file.

Return values:

  | t | soname dependency

Parameters:

  | s | elf string (NULL uses "")
  | isElf64 | is this an ELF64 symbol?

Definition at line 2755 of file rpmds.c.

References _free(), DT_GNU_HASH, rpmdsFree(), rpmdsSingle(), RPMELF_FLAG_SKIPPROVIDES, RPMELF_FLAG_SKIPREQUIRES, rpmExpandNumeric(), RPMTAG_PROVIDES, stpcpy(), and xstrdup().

Referenced by main(), rpmdsLdconfig(), rpmfcELF(), and unsatisfiedDepend().

const char* rpmdsEVR | ( | const rpmds | ds | ) |

Return current dependency epoch-version-release.

Parameters:

  | ds | dependency set

Returns:
  current dependency EVR, NULL on invalid

Definition at line 659 of file rpmds.c.

Referenced by rpmds_compare(), rpmds_EVR(), rpmds_iternext(), rpmdsProblem(), rpmfcFileDep(), rpmfcGenerateDepends(), rpmtsAddInstallElement(), rpmtsCheck(), and unsatisfiedDepend().

int rpmdsFind | ( | rpmds | ds,
|  | const rpmds | ods |
| ) |  |  |

Find a dependency set element using binary search.

Parameters:

  | ds | dependency set to search
  | ods | dependency set element to find.

Returns:
  dependency index (or -1 if not found)

Definition at line 958 of file rpmds.c.

Referenced by rpmds_Find(), rpmdsMerge(), and rpmfcApply().

evrFlags rpmdsFlags | ( | const rpmds | ds | ) |

Return current dependency flags.

Parameters:

  | ds | dependency set

Returns:
  current dependency flags, 0 on invalid

Definition at line 670 of file rpmds.c.

Referenced by handleOneTrigger(), missingokTag(), printDeps(), rpmds_Flags(), rpmds_iternext(), rpmdsAnyMatchesDep(), rpmdsCompare(), rpmdsNVRMatchesDep(), rpmfcFileDep(), rpmtsOrder(), unsatisfiedDepend(), and zapRelation().

rpmds rpmdsFree | ( | rpmds | ds | ) |

Destroy a dependency set.

Parameters:

  | ds | dependency set

Returns:
  NULL always

Definition at line 139 of file rpmds.c.

References _free(), headerFree(), and rpmdsUnlink.

Referenced by checkPackageSet(), ensureOlder(), freePackage(), handleOneTrigger(), main(), missingokTag(), printDeps(), rpmalDel(), rpmalFree(), rpmcliInstall(), rpmds_dealloc(), rpmds_free(), rpmds_Sort(), rpmdsAnyMatchesDep(), rpmdsELF(), rpmdsFreePRCO(), rpmdsLdconfig(), rpmdsNSAdd(), rpmdsNVRMatchesDep(), rpmdsPipe(), rpmdsRpmlib(), rpmdsSysinfoFile(), rpmfcApply(), rpmfcFree(), rpmfcGenerateDepends(), rpmfcHelper(), rpmfcSCRIPT(), rpmfiBuildFDeps(), rpmHeadersIdentical(), rpmnsClean(), rpmShowRC(), rpmtsAddInstallElement(), and unsatisfiedDepend().

rpmPRCO rpmdsFreePRCO | ( | rpmPRCO | PRCO | ) |

Free dependency set(s) container.

Parameters:

  | PRCO | dependency set(s) container

Returns:
  NULL

Definition at line 2657 of file rpmds.c.

References _free(), and rpmdsFree().

Referenced by main(), rpmds_Ldconfig(), rpmds_Sysinfo(), rpmShowRC(), rpmteCleanDS(), rpmtsFree(), and unsatisfiedDepend().

rpmds rpmdsFromPRCO | ( | rpmPRCO | PRCO,
|  | rpmTag | tagN |
| ) |  |  |

Retrieve a dependency set from container.

Parameters:

  | PRCO | dependency set(s) container
  | tagN | type of dependency set

Returns:
  dependency set (or NULL)

Definition at line 2705 of file rpmds.c.

Referenced by main(), rpmds_Ldconfig(), rpmds_Sysinfo(), rpmShowRC(), rpmteDS(), rpmtsCheck(), and unsatisfiedDepend().

int rpmdsGetconf | ( | rpmds * | dsp,
|  | const char * | path |
| ) |  |  |

Load getconf provides into a dependency set.

Return values:

  | *dsp | (loaded) depedency set

Parameters:

  | path | getconf path (NULL uses /)

Returns:
  0 on success

Definition at line 2522 of file rpmds.c.

References _free(), _GETCONF_PATH, conf::call, conf::call_name, conf::CONFSTR, errno, EXIT_FAILURE, conf::name, conf::PATHCONF, rpmdsNSAdd(), rpmExpand(), RPMSENSE_EQUAL, conf::SYSCONF, xmalloc(), and xstrdup().

Referenced by main(), rpmds_Getconf(), rpmShowRC(), and unsatisfiedDepend().

rpmds rpmdsInit | ( | rpmds | ds | ) |

Initialize dependency set iterator.

Parameters:

  | ds | dependency set

Returns:
  dependency set

Definition at line 902 of file rpmds.c.

Referenced by checkPackageDeps(), handleOneTrigger(), missingokTag(), printDeps(), rpmalAddProvides(), rpmdepPrint(), rpmds_iternext(), rpmds_print(), rpmdsAnyMatchesDep(), rpmdsMerge(), rpmdsPrint(), rpmdsPrintClosure(), rpmdsPrintResults(), rpmShowRC(), rpmteColorDS(), rpmtsAddInstallElement(), rpmtsCheck(), and rpmtsOrder().

int rpmdsIx | ( | const rpmds | ds | ) |

Return dependency set index.

Parameters:

  | ds | dependency set

Returns:
  current index

Definition at line 620 of file rpmds.c.

Referenced by addRelation(), rpmalAddProvides(), rpmdepPrint(), rpmds_Find(), rpmds_Ix(), rpmdsPrint(), rpmdsPrintResults(), and rpmdsSearch().

int rpmdsLdconfig | ( | rpmPRCO | PRCO,
|  | const char * | fn |
| ) |  |  |

Load /etc/ld.so.cache provides into a dependency set.

Todo:
  Add dependency colors, and attach to file.

Return values:

  | *PRCO | provides/requires/conflicts/obsoletes depedency set(s)

Parameters:

  | fn | cache file name (NULL uses /etc/ld.so.cache)

Returns:
  0 on success

Definition at line 3040 of file rpmds.c.

References _free(), _isspace, _LD_SO_CACHE, _SBIN_LDCONFIG_P, rpmdsELF(), rpmdsFree(), rpmdsMerge(), rpmdsMergePRCO(), rpmdsSingle(), rpmExpand(), and xstrdup().

Referenced by main(), and rpmds_Ldconfig().

rpmds rpmdsLink | ( | rpmds | ds,
|  | const char * | msg |
| ) |  |  |

Reference a dependency set instance.

Parameters:

  | ds | dependency set
  | msg |

Returns:
  new dependency set reference

int rpmdsMerge | ( | rpmds * | dsp,
|  | rpmds | ods |
| ) |  |  |

Merge a dependency set maintaining (N,EVR,Flags) sorted order.

Return values:

  | *dsp | (merged) dependency set

Parameters:

  | ods | dependency set to merge

Returns:
  0 on success

Definition at line 990 of file rpmds.c.

References _free(), rpmdsDup(), rpmdsDupArgv(), rpmdsFind(), rpmdsInit(), rpmdsNext(), save(), and xmalloc().

Referenced by rpmds_Merge(), rpmds_Sort(), rpmdsLdconfig(), rpmdsMergePRCO(), rpmdsNSAdd(), rpmdsPipe(), rpmdsRpmlib(), rpmfcGenerateDepends(), rpmfcHelper(), rpmfcMergePR(), and rpmfcSCRIPT().

int rpmdsMergePRCO | ( | void * | context,
|  | rpmds | ds |
| ) |  |  |

Merge provides/requires/conflicts/obsoletes dependencies.

Parameters:

  | context | merge dependency set(s) container
  | ds | dependency set to merge

Returns:
  0 on success

Definition at line 2620 of file rpmds.c.

References rpmdsMerge(), rpmdsTagN(), and tagName().

Referenced by main(), rpmdsLdconfig(), rpmdsSysinfoFile(), and unsatisfiedDepend().

const char* rpmdsN | ( | rpmds | ds | ) |

Return current dependency name.

Parameters:

  | ds | dependency set

Returns:
  current dependency name, NULL on invalid

Definition at line 647 of file rpmds.c.

References rpmdsNewN().

Referenced by addRelation(), checkPackageDeps(), handleOneTrigger(), rpmalAllFileSatisfiesDepend(), rpmalAllSatisfiesDepend(), rpmds_iternext(), rpmds_N(), rpmdsProblem(), rpmfcFileDep(), rpmfcGenerateDepends(), rpmtsAddInstallElement(), rpmtsCheck(), rpmtsSolve(), and unsatisfiedDepend().

int rpmdsNegateRC | ( | const rpmds | ds,
|  | int | rc |
| ) |  |  |

Negate return code for negated comparisons.

Parameters:

  | ds | dependency set
  | rc | postive return code

Returns:
  return code

Definition at line 3766 of file rpmds.c.

Referenced by rpmtsCheck(), and unsatisfiedDepend().

rpmds rpmdsNew | ( | Header | h,
|  | rpmTag | tagN,
|  | int | flags |
| ) |  |  |

Create and load a dependency set.

Parameters:

  | h | header
  | tagN | type of dependency
  | flags | scareMem(0x1), nofilter(0x2)

Returns:
  new dependency set

Definition at line 236 of file rpmds.c.

References _free(), alloca(), rpmDataType_u::argv, argvFree(), _HE_s::c, headerGet(), _HE_s::p, rpmDataType_u::ptr, rpmdsDupArgv(), rpmdsLink, rpmGenPath(), rpmDataType_u::str, _HE_s::tag, rpmDataType_u::ui32p, urlPath(), xcalloc(), and xstrdup().

Referenced by checkPackageSet(), handleOneTrigger(), hdr_dsFromHeader(), missingokTag(), printDeps(), rpmds_init(), rpmdsAnyMatchesDep(), rpmdsNewPRCO(), rpmfcGenerateDepends(), and rpmfiBuildFDeps().

char* rpmdsNewDNEVR | ( | const char * | dspfx,
|  | rpmds | ds |
| ) |  |  |

Return new formatted dependency string.

Parameters:

  | dspfx | formatted dependency string prefix
  | ds | dependency set

Returns:
  new formatted dependency (malloc'ed)

Definition at line 394 of file rpmds.c.

References _rpmns_N_at_A, rpmdsNewN(), RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_NOTEQUAL, RPMSENSE_SENSEMASK, stpcpy(), and xmalloc().

Referenced by rpmdsNext(), rpmdsSingle(), rpmdsThis(), and zapRelation().

const char* rpmdsNewN | ( | rpmds | ds | ) |

Return N string, expanded if necessary.

Parameters:

  | ds | dependency set

Returns:
  new N string (malloc'ed)

Definition at line 380 of file rpmds.c.

References rpmnsParse().

Referenced by rpmdsN(), and rpmdsNewDNEVR().

rpmPRCO rpmdsNewPRCO | ( | Header | h | ) |

Create dependency set(s) container.

Parameters:

  | h | header

Returns:
  0 on success

Definition at line 2680 of file rpmds.c.

References rpmdsNew(), rpmdsThis(), RPMSENSE_EQUAL, and xcalloc().

Referenced by addTE(), main(), rpmds_Ldconfig(), rpmds_Sysinfo(), rpmShowRC(), rpmtsCreate(), and unsatisfiedDepend().

int rpmdsNext | ( | rpmds | ds | ) |

Return next dependency set iterator index.

Parameters:

  | ds | dependency set

Returns:
  dependency set iterator index, -1 on termination

Definition at line 871 of file rpmds.c.

References _free(), and rpmdsNewDNEVR().

Referenced by checkPackageDeps(), handleOneTrigger(), missingokTag(), printDeps(), rpmalAddProvides(), rpmalAllSatisfiesDepend(), rpmdepPrint(), rpmds_iternext(), rpmds_print(), rpmds_subscript(), rpmdsAnyMatchesDep(), rpmdsMerge(), rpmdsPrint(), rpmdsPrintClosure(), rpmdsPrintResults(), rpmdsSearch(), rpmfcPrint(), rpmfiBuildFDeps(), rpmShowRC(), rpmteColorDS(), rpmtsAddInstallElement(), rpmtsCheck(), and rpmtsOrder().

int rpmdsNoPromote | ( | const rpmds | ds | ) |

Return current "Don't promote Epoch:" flag.

This flag controls for Epoch: promotion when a dependency set is compared. If the flag is set (for already installed packages), then an unspecified value will be treated as Epoch: 0. Otherwise (for added packages), the Epoch: portion of the comparison is skipped if the value is not specified, i.e. an unspecified Epoch: is assumed to be equal in dependency comparisons.

Parameters:

  | ds | dependency set

Returns:
  current "Don't promote Epoch:" flag

Definition at line 725 of file rpmds.c.

void rpmdsNotify | ( | rpmds | ds,
|  | const char * | where,
|  | int | rc |
| ) |  |  |

Notify of results of dependency match.

Parameters:

  | ds | dependency set
  | where | where dependency was resolved (or NULL)
  | rc | 0 == YES, otherwise NO

Definition at line 858 of file rpmds.c.

References _, rpmlog(), and RPMLOG_DEBUG.

Referenced by rpmalAllFileSatisfiesDepend(), rpmalAllSatisfiesDepend(), rpmds_Notify(), and unsatisfiedDepend().

nsType rpmdsNSType | ( | const rpmds | ds | ) |

Return dependency class type.

Parameters:

  | ds | dependency set

Returns:
  dependency class type

Definition at line 717 of file rpmds.c.

References RPMNS_TYPE_UNKNOWN.

Referenced by addRelation(), rpmtsCheck(), and unsatisfiedDepend().

int rpmdsNVRMatchesDep | ( | const Header | h,
|  | const rpmds | req,
|  | int | nopromote |
| ) |  |  |

Compare package name-version-release from header with a single dependency.

Parameters:

  | h | header
  | req | dependency set
  | nopromote | Don't promote Epoch: in comparison?

Returns:
  1 if dependency overlaps, 0 otherwise

Definition at line 3713 of file rpmds.c.

References _free(), alloca(), headerGet(), headerNEVRA(), _HE_s::p, rpmDataType_u::ptr, rpmdsCompare(), rpmdsFlags(), rpmdsFree(), rpmdsSetNoPromote(), rpmdsSingle(), RPMSENSE_EQUAL, RPMSENSE_SENSEMASK, stpcpy(), _HE_s::tag, and rpmDataType_u::ui32p.

Referenced by ensureOlder().

int rpmdsPipe | ( | rpmds * | dsp,
|  | rpmTag | tagN,
|  | const char * | cmd |
| ) |  |  |

Load provides from a pipe into a dependency set.

Return values:

  | *dsp | (loaded) depedency set

Parameters:

  | tagN | rpmds tag (0 uses RPMTAG_PROVIDENAME).
  | cmd | popen cmd to run (NULL loads perl provides)

Returns:
  0 on success

Definition at line 3386 of file rpmds.c.

References _, _free(), _isspace, _PERL_PROVIDES, rpmdsFree(), rpmdsMerge(), rpmdsSingle(), rpmEVRflags(), rpmExpand(), xisalnum(), and xstrdup().

Referenced by main().

static int rpmdsPrint | ( | rpmds | ds,
|  | FILE * | fp |
| ) |  |  | `[inline, static]`

Print current dependency set contents.

Parameters:

  | ds | dependency set
  | fp | file handle (NULL uses stderr)

Returns:
  0 always

Definition at line 714 of file rpmds.h.

References rpmdsDNEVR(), rpmdsInit(), rpmdsIx(), rpmdsNext(), and rpmdsTagName().

static int rpmdsPrintClosure | ( | rpmds | P,
|  | rpmds | R,
|  | FILE * | fp |
| ) |  |  | `[inline, static]`

Check Provides: against Requires: and print closure results.

Parameters:

  | P | Provides: dependency set
  | R | Requires: dependency set
  | fp | file handle (NULL uses stderr)

Returns:
  0 always

Definition at line 758 of file rpmds.h.

References rpmdsInit(), rpmdsNext(), rpmdsPrintResults(), rpmdsSearch(), and rpmdsSetResult().

Referenced by main().

static int rpmdsPrintResults | ( | rpmds | ds,
|  | FILE * | fp |
| ) |  |  | `[inline, static]`

Print current dependency set results.

Parameters:

  | ds | dependency set
  | fp | file handle (NULL uses stderr)

Returns:
  0 always

Definition at line 733 of file rpmds.h.

References rpmdsDNEVR(), rpmdsInit(), rpmdsIx(), rpmdsNext(), rpmdsResult(), and rpmdsTagName().

Referenced by rpmdsPrintClosure().

void rpmdsProblem | ( | rpmps | ps,
|  | const char * | pkgNEVR,
|  | const rpmds | ds,
|  | const fnpyKey * | suggestedKeys,
|  | int | adding |
| ) |  |  |

Report a Requires: or Conflicts: dependency problem.

Parameters:

  | ps | transaction set problems
  | pkgNEVR | package name/epoch/version/release
  | ds | dependency set
  | suggestedKeys | filename or python object address
  | adding | dependency problem is from added package set?

Definition at line 3633 of file rpmds.c.

References D_, rpmdsDNEVR(), rpmdsEVR(), rpmdsN(), rpmlog(), RPMLOG_DEBUG, RPMPROB_CONFLICT, RPMPROB_REQUIRES, and rpmpsAppend().

Referenced by checkPackageDeps().

uint32_t rpmdsRefs | ( | const rpmds | ds | ) |

Return current dependency file refs.

Parameters:

  | ds | dependency set

Returns:
  current dependency file refs (0 if not set)

Definition at line 798 of file rpmds.c.

Referenced by rpmds_Refs().

int32_t rpmdsResult | ( | const rpmds | ds | ) |

Return current dependency comparison result.

Parameters:

  | ds | dependency set

Returns:
  current dependency result (0 if not set)

Definition at line 828 of file rpmds.c.

Referenced by rpmds_Result(), and rpmdsPrintResults().

int rpmdsRpmlib | ( | rpmds * | dsp,
|  | void * | tblp |
| ) |  |  |

Load rpmlib provides into a dependency set.

Return values:

  | *dsp | (loaded) depedency set

Parameters:

  | tblp | rpmlib provides table (NULL uses internal table)

Returns:
  0 on success

Definition at line 1403 of file rpmds.c.

References rpmlibProvides_s::featureEVR, rpmlibProvides_s::featureFlags, rpmlibProvides_s::featureName, rpmdsFree(), rpmdsMerge(), and rpmdsSingle().

Referenced by main(), rpmds_Rpmlib(), rpmShowRC(), and unsatisfiedDepend().

int rpmdsSearch | ( | rpmds | ds,
|  | rpmds | ods |
| ) |  |  |

Search a sorted dependency set for an element that overlaps.

A boolean result is saved (if allocated) and accessible through rpmdsResult(ods) afterwards.

Parameters:

  | ds | dependency set to search
  | ods | dependency set element to find.

Returns:
  dependency index (or -1 if not found)

Definition at line 1068 of file rpmds.c.

References rpmdsCompare(), rpmdsIx(), rpmdsNext(), rpmdsSetIx(), rpmdsSetResult(), and save().

Referenced by rpmds_Search(), rpmdsPrintClosure(), and unsatisfiedDepend().

time_t rpmdsSetBT | ( | const rpmds | ds,
|  | time_t | BT |
| ) |  |  |

Set dependency build time.

Parameters:

  | ds | dependency set
  | BT | build time

Returns:
  dependency build time, 0 on invalid

Definition at line 707 of file rpmds.c.

uint32_t rpmdsSetColor | ( | const rpmds | ds,
|  | uint32_t | color |
| ) |  |  |

Set current dependency color.

Parameters:

  | ds | dependency set
  | color | new dependency color

Returns:
  previous dependency color

Definition at line 779 of file rpmds.c.

References xcalloc().

Referenced by rpmteColorDS().

void* rpmdsSetEVRcmp | ( | rpmds | ds,
|  | int(*)(const char *a, const char *b) | EVRcmp |
| ) |  |  |

Set EVR comparison function.

Parameters:

  | ds | dependency set
  | EVRcmp | EVR comparison function (NULL uses default)

Returns:
  previous EVR comparison function

Definition at line 757 of file rpmds.c.

void* rpmdsSetEVRparse | ( | rpmds | ds,
|  | int(*)(const char *everstr, EVR_t evr) | EVRparse |
| ) |  |  |

Set EVR parsing function.

Parameters:

  | ds | dependency set
  | EVRparse | EVR parsing function (NULL uses default)

Returns:
  previous EVR parsing function

int rpmdsSetIx | ( | rpmds | ds,
|  | int | ix |
| ) |  |  |

Set dependency set index.

Parameters:

  | ds | dependency set
  | ix | new index

Returns:
  current index

Definition at line 625 of file rpmds.c.

Referenced by rpmalAllSatisfiesDepend(), rpmds_Find(), rpmds_subscript(), rpmdsSearch(), rpmfcPrint(), rpmfiBuildFDeps(), and zapRelation().

int rpmdsSetNoPromote | ( | rpmds | ds,
|  | int | nopromote |
| ) |  |  |

Set "Don't promote Epoch:" flag.

Parameters:

  | ds | dependency set
  | nopromote | Should an unspecified Epoch: be treated as Epoch: 0?

Returns:
  previous "Don't promote Epoch:" flag

Definition at line 734 of file rpmds.c.

Referenced by checkPackageSet(), handleOneTrigger(), rpmds_SetNoPromote(), rpmdsAnyMatchesDep(), and rpmdsNVRMatchesDep().

uint32_t rpmdsSetRefs | ( | const rpmds | ds,
|  | uint32_t | refs |
| ) |  |  |

Set current dependency file refs.

Parameters:

  | ds | dependency set
  | refs | new dependency refs

Returns:
  previous dependency refs

Definition at line 809 of file rpmds.c.

References xcalloc().

Referenced by rpmteColorDS().

int32_t rpmdsSetResult | ( | const rpmds | ds,
|  | int32_t | result |
| ) |  |  |

Set current dependency comparison result.

Parameters:

  | ds | dependency set
  | result | new dependency result

Returns:
  previous dependency result

Definition at line 839 of file rpmds.c.

References xcalloc().

Referenced by rpmdsPrintClosure(), and rpmdsSearch().

rpmds rpmdsSingle | ( | rpmTag | tagN,
|  | const char * | N,
|  | const char * | EVR,
|  | evrFlags | Flags |
| ) |  |  |

Create, load and initialize a dependency set of size 1.

Parameters:

  | tagN | type of dependency
  | N | name
  | EVR | epoch:version-release
  | Flags | comparison/context flags

Returns:
  new dependency set

Definition at line 564 of file rpmds.c.

References rpmdsLink, rpmdsNewDNEVR(), xcalloc(), and xmalloc().

Referenced by ensureOlder(), rpmcliInstall(), rpmds_iternext(), rpmds_Single(), rpmdsELF(), rpmdsLdconfig(), rpmdsNSAdd(), rpmdsNVRMatchesDep(), rpmdsPipe(), rpmdsRpmlib(), rpmdsSysinfoFile(), rpmfcApply(), rpmfcGenerateDepends(), rpmfcHelper(), rpmfcSCRIPT(), and unsatisfiedDepend().

int rpmdsSysinfo | ( | rpmPRCO | PRCO,
|  | const char * | fn |
| ) |  |  |

Load sysinfo dependencies into a dependency set.

Return values:

  | *PRCO | provides/requires/conflicts/obsoletes depedency set(s)

Parameters:

  | fn | path to file (NULL uses /etc/rpm/sysinfo)

Returns:
  0 on success

Definition at line 1563 of file rpmds.c.

References _ETC_RPM_SYSINFO, _free(), alloca(), rpmdsSysinfoFile(), rpmExpand(), rpmGetPath(), Stat(), tagValue(), and xstrdup().

Referenced by main(), rpmds_Sysinfo(), rpmShowRC(), and rpmtsCreate().

rpmTag rpmdsTagN | ( | const rpmds | ds | ) |

Return current dependency type.

Parameters:

  | ds | dependency set

Returns:
  current dependency type, 0 on invalid

Definition at line 681 of file rpmds.c.

Referenced by addRelation(), rpmds_iternext(), rpmds_TagN(), rpmdsMergePRCO(), rpmdsTagName(), rpmfcFileDep(), rpmfcMergePR(), rpmtsSolve(), and unsatisfiedDepend().

static const char* rpmdsTagName | ( | const rpmds | ds | ) | `[inline, static]`

Return current dependency type name.

Parameters:

  | ds | dependency set

Returns:
  current dependency type name

Definition at line 691 of file rpmds.h.

References rpmdsTagN(), and tagName().

Referenced by rpmdepPrint(), rpmdsPrint(), and rpmdsPrintResults().

rpmds rpmdsThis | ( | Header | h,
|  | rpmTag | tagN,
|  | evrFlags | Flags |
| ) |  |  |

Create, load and initialize a dependency for this header.

Parameters:

  | h | header
  | tagN | type of dependency
  | Flags | comparison flags

Returns:
  new dependency set

Definition at line 473 of file rpmds.c.

References _free(), alloca(), headerGet(), headerNEVRA(), _HE_s::p, rpmDataType_u::ptr, rpmdsLink, rpmdsNewDNEVR(), stpcpy(), rpmDataType_u::str, _HE_s::tag, rpmDataType_u::ui32p, xcalloc(), and xmalloc().

Referenced by hdr_dsOfHeader(), parseSpec(), rpmdsNewPRCO(), rpmHeadersIdentical(), and rpmtsAddInstallElement().

rpmds rpmdsUnlink | ( | rpmds | ds,
|  | const char * | msg |
| ) |  |  |

Unreference a dependency set instance.

Parameters:

  | ds | dependency set
  | msg |

Returns:
  NULL always

int rpmEVRcmp | ( | const char * | a,
|  | const char * | b |
| ) |  |  |

Segmented string compare.

Parameters:

  | a | 1st string
  | b | 2nd string

Returns:
  +1 if a is "newer", 0 if equal, -1 if b is "newer"

Definition at line 44 of file rpmevr.c.

References _invert_digits_alphas_comparison, MAX, xisdigit(), and xisrpmalpha().

int rpmEVRcompare | ( | const EVR_t | a,
|  | const EVR_t | b |
| ) |  |  |

Compare EVR containers.

Parameters:

  | a | 1st EVR container
  | b | 2nd EVR container

Returns:
  +1 if a is "newer", 0 if equal, -1 if b is "newer"

Definition at line 138 of file rpmevr.c.

References compare_values().

Referenced by labelCompare().

int rpmEVRparse | ( | const char * | evrstr,
|  | EVR_t | evr |
| ) |  |  |

Split EVR string into epoch, version, and release components.

Parameters:

  | evrstr | [epoch:]version[-release] string

Return values:

  | *evr | parse results

Returns:
  0 always

Definition at line 96 of file rpmevr.c.

References xisdigit(), and xstrdup().

Referenced by dpkgEVRparse(), and rpmdsCompare().

nsType rpmnsArch | ( | const char * | str | ) |

Is string a known arch suffix?

Parameters:

  | str | string

Returns:
  RPMNS_TYPE_ARCH if known arch, else RPMNS_TYPE_UNKNOWN

Definition at line 57 of file rpmns.c.

References RPMNS_TYPE_ARCH, RPMNS_TYPE_UNKNOWN, and rpmnsArches.

Referenced by rpmnsClassify(), and rpmtsInitIterator().

nsType rpmnsClassify | ( | const char * | str | ) |

Classify a string as a dependency type.

Parameters:

  | str | string like "bing(bang).boom"

Returns:
  dependency type

Definition at line 142 of file rpmns.c.

References _rpmns_N_at_A, RPMNS_TYPE_ARCH, RPMNS_TYPE_COMPOUND, RPMNS_TYPE_DSO, RPMNS_TYPE_FUNCTION, RPMNS_TYPE_NAMESPACE, RPMNS_TYPE_PATH, RPMNS_TYPE_STRING, RPMNS_TYPE_UNKNOWN, RPMNS_TYPE_VERSION, rpmnsArch(), rpmnsProbe(), _rpmnsProbes_s::Type, and xisdigit().

Referenced by rpmnsParse().

int rpmnsParse | ( | const char * | str,
|  | rpmns | ns |
| ) |  |  |

Split NS string into namespace, name and arch components.

Parameters:

  | str | string like "bing(bang).boom"

Return values:

  | *ns | parse results

Returns:
  0 always

Definition at line 178 of file rpmns.c.

References _rpmns_N_at_A, rpmExpand(), RPMNS_TYPE_ACCESS, RPMNS_TYPE_ARCH, RPMNS_TYPE_COMPOUND, RPMNS_TYPE_CPUINFO, RPMNS_TYPE_DIGEST, RPMNS_TYPE_DISKSPACE, RPMNS_TYPE_DSO, RPMNS_TYPE_ENVVAR, RPMNS_TYPE_FUNCTION, RPMNS_TYPE_GETCONF, RPMNS_TYPE_GNUPG, RPMNS_TYPE_GROUP, RPMNS_TYPE_MACRO, RPMNS_TYPE_MOUNTED, RPMNS_TYPE_NAMESPACE, RPMNS_TYPE_PATH, RPMNS_TYPE_RPMLIB, RPMNS_TYPE_RUNNING, RPMNS_TYPE_SANITY, RPMNS_TYPE_SIGNATURE, RPMNS_TYPE_SONAME, RPMNS_TYPE_STRING, RPMNS_TYPE_TAG, RPMNS_TYPE_UNAME, RPMNS_TYPE_UNKNOWN, RPMNS_TYPE_USER, RPMNS_TYPE_VCHECK, RPMNS_TYPE_VERSION, and rpmnsClassify().

Referenced by rpmdsNewN().

nsType rpmnsProbe | ( | const char * | str | ) |

Is string a known probe namespace?

Parameters:

  | str | string

Returns:
  nsType if known probe, else RPMNS_TYPE_UNKNOWN

Definition at line 127 of file rpmns.c.

References _rpmnsProbes_s::NS, RPMNS_TYPE_UNKNOWN, rpmnsProbes, and _rpmnsProbes_s::Type.

Referenced by rpmnsClassify().

## Variable Documentation

int _rpmds_debug

Definition at line 105 of file rpmds.c.

int _rpmds_nopromote

Definition at line 108 of file rpmds.c.

const char* _sysinfo_path

Definition at line 1550 of file rpmds.c.

Referenced by rpmnsClean().

int(* rpmvercmp)(const char *a, const char *b)

Segmented string compare vector.

Parameters:

  | a | 1st string
  | b | 2nd string

Returns:
  +1 if a is "newer", 0 if equal, -1 if b is "newer"

Referenced by compare_values(), rpmdsCompare(), and rpmVersionCompare().