Defines | Functions | Variables

lib/rpmps.c File Reference

#include "system.h"
#include <rpmio.h>
#include <rpmiotypes.h>
#include <rpmtypes.h>
#include <yarn.h>
#include "rpmps.h"
#include "debug.h"
Include dependency graph for rpmps.c:

Go to the source code of this file.

Defines

#define _RPMPS_INTERNAL
#define XSTRCMP(a, b)   ((!(a) && !(b)) || ((a) && (b) && !strcmp((a), (b))))

Functions

static rpmps rpmpsGetPool (rpmioPool pool)
int rpmpsNumProblems (rpmps ps)
 Return number of problems in set.
rpmpsi rpmpsInitIterator (rpmps ps)
 Initialize problem set iterator.
rpmpsi rpmpsFreeIterator (rpmpsi psi)
 Destroy problem set iterator.
int rpmpsNextIterator (rpmpsi psi)
 Return next problem set iterator index.
rpmProblem rpmpsProblem (rpmpsi psi)
 Return current problem from problem set.
rpmps rpmpsCreate (void)
 Create a problem set.
rpmps rpmpsFree (rpmps ps)
 Destroy a problem set.
void rpmpsAppend (rpmps ps, rpmProblemType type, const char *pkgNEVR, fnpyKey key, const char *dn, const char *bn, const char *altNEVR, rpmuint64_t ulong1)
 Append a problem to current set of problems.
int rpmpsTrim (rpmps ps, rpmps filter)
 Filter a problem set.
static int vsnprintf (char *buf, int nb, const char *fmt, va_list ap)
static int snprintf (char *buf, int nb, const char *fmt,...)
const char * rpmProblemString (const rpmProblem prob)
 Return formatted string representation of a problem.
static int sameProblem (const rpmProblem ap, const rpmProblem bp)
void rpmpsPrint (FILE *fp, rpmps ps)
 Print problems to file handle.
rpmProblem rpmpsGetProblem (rpmps ps, int num)
 Return a problem from problem set.
char * rpmProblemGetPkgNEVR (rpmProblem prob)
 Return the package NEVR causing the problem.
char * rpmProblemGetAltNEVR (rpmProblem prob)
 Return the second package NEVR causing the problem.
char * rpmProblemGetStr (rpmProblem prob)
 Return a generic data string from a problem.
rpmuint64_t rpmProblemGetDiskNeed (rpmProblem prob)
 Return generic pointer/long attribute from a problem.
rpmProblemType rpmProblemGetType (rpmProblem prob)
 Return the problem type.
fnpyKey rpmProblemKey (rpmProblem prob)
 Return the transaction key causing the problem.

Variables

int _rpmps_debug = 0
rpmioPool _rpmpsPool

Detailed Description

Definition in file rpmps.c.


Define Documentation

#define _RPMPS_INTERNAL

Definition at line 12 of file rpmps.c.

#define XSTRCMP (   a,
 
)    ((!(a) && !(b)) || ((a) && (b) && !strcmp((a), (b))))

Definition at line 169 of file rpmps.c.

Referenced by rpmpsTrim().


Function Documentation

char* rpmProblemGetAltNEVR ( rpmProblem  prob )

Return the second package NEVR causing the problem.

Parameters:
probrpm problem
Returns:
NEVR string ptr, or NULL if unset

Definition at line 408 of file rpmps.c.

Referenced by rpmts_Check(), and verifyDependencies().

rpmuint64_t rpmProblemGetDiskNeed ( rpmProblem  prob )

Return generic pointer/long attribute from a problem.

Parameters:
probrpm problem
Returns:
a generic pointer/long attribute

Definition at line 418 of file rpmps.c.

Referenced by rpmts_Run().

char* rpmProblemGetPkgNEVR ( rpmProblem  prob )

Return the package NEVR causing the problem.

Parameters:
probrpm problem
Returns:
NEVR string ptr

Definition at line 403 of file rpmps.c.

Referenced by rpmts_Check(), and verifyDependencies().

char* rpmProblemGetStr ( rpmProblem  prob )

Return a generic data string from a problem.

Parameters:
probrpm problem
Returns:
a generic data string
Todo:
needs a better name

Definition at line 413 of file rpmps.c.

Referenced by rpmts_Run().

rpmProblemType rpmProblemGetType ( rpmProblem  prob )

Return the problem type.

Parameters:
probrpm problem
Returns:
rpmProblemType

Definition at line 423 of file rpmps.c.

Referenced by rpmts_Check(), and rpmts_Run().

fnpyKey rpmProblemKey ( rpmProblem  prob )

Return the transaction key causing the problem.

Parameters:
probrpm problem
Returns:
fnpkey ptr if any or NULL

Definition at line 428 of file rpmps.c.

Referenced by rpmts_Check().

const char* rpmProblemString ( const rpmProblem  prob )
void rpmpsAppend ( rpmps  ps,
rpmProblemType  type,
const char *  pkgNEVR,
fnpyKey  key,
const char *  dn,
const char *  bn,
const char *  altNEVR,
rpmuint64_t  ulong1 
)

Append a problem to current set of problems.

Warning:
This function's args have changed, so the function cannot be used portably
Parameters:
psproblem set
typetype of problem
pkgNEVRpackage name
keyfilename or python object address
dndirectory name
bnfile base name
altNEVRrelated (e.g. through a dependency) package name
ulong1generic pointer/long attribute

Definition at line 128 of file rpmps.c.

References stpcpy(), xcalloc(), xrealloc(), and xstrdup().

Referenced by cmpArgvStr(), ensureOlder(), handleInstInstalledFiles(), handleOverlappedFiles(), relocateFileList(), rpmps_Append(), rpmps_ass_sub(), rpmtsAddInstallElement(), rpmtsCheckDSIProblems(), and rpmtsRun().

rpmps rpmpsCreate ( void   )

Create a problem set.

Returns:
new problem set

Definition at line 93 of file rpmps.c.

References rpmpsGetPool(), and rpmpsLink().

Referenced by rpmps_init(), and rpmtsProblems().

rpmps rpmpsFree ( rpmps  ps )
rpmpsi rpmpsFreeIterator ( rpmpsi  psi )

Destroy problem set iterator.

Parameters:
psiproblem set iterator
Returns:
problem set iterator (NULL)

Definition at line 61 of file rpmps.c.

References _free(), and rpmpsUnlink().

Referenced by rpmps_iternext(), rpmps_subscript(), rpmpsPrint(), rpmts_Check(), rpmts_Run(), and verifyDependencies().

static rpmps rpmpsGetPool ( rpmioPool  pool ) [static]

Definition at line 26 of file rpmps.c.

References _rpmps_debug, _rpmpsPool, rpmioGetPool(), and rpmioNewPool().

Referenced by rpmpsCreate().

rpmProblem rpmpsGetProblem ( rpmps  ps,
int  num 
)

Return a problem from problem set.

Parameters:
psproblem set
numproblem number (<0 is last problem)
Returns:
rpmProblem, or NULL if error

Definition at line 391 of file rpmps.c.

Referenced by rpmtsAddInstallElement().

rpmpsi rpmpsInitIterator ( rpmps  ps )

Initialize problem set iterator.

Parameters:
psproblem set
Returns:
problem set iterator

Definition at line 48 of file rpmps.c.

References rpmpsLink(), and xcalloc().

Referenced by rpmps_iter(), rpmps_iternext(), rpmps_subscript(), rpmpsPrint(), rpmts_Check(), rpmts_Run(), and verifyDependencies().

int rpmpsNextIterator ( rpmpsi  psi )

Return next problem set iterator index.

Parameters:
psiproblem set iterator
Returns:
iterator index, -1 on termination

Definition at line 70 of file rpmps.c.

References rpmpsNumProblems().

Referenced by rpmps_iternext(), rpmps_subscript(), rpmpsPrint(), rpmts_Check(), rpmts_Run(), and verifyDependencies().

int rpmpsNumProblems ( rpmps  ps )

Return number of problems in set.

Parameters:
psproblem set
Returns:
number of problems

Definition at line 40 of file rpmps.c.

Referenced by rpmcliInstallProblems(), rpmgiNext(), rpmps_length(), rpmpsNextIterator(), rpmpsProblem(), rpmtsCheck(), rpmtsRun(), and verifyDependencies().

void rpmpsPrint ( FILE *  fp,
rpmps  ps 
)

Print problems to file handle.

Parameters:
fpfile handle (NULL uses stderr)
psproblem set

Definition at line 351 of file rpmps.c.

References _free(), rpmProblemString(), rpmpsFreeIterator(), rpmpsInitIterator(), rpmpsNextIterator(), rpmpsProblem(), and sameProblem().

Referenced by rpmcliInstallProblems(), rpmgiNext(), and rpmps_print().

rpmProblem rpmpsProblem ( rpmpsi  psi )

Return current problem from problem set.

Parameters:
psiproblem set iterator
Returns:
current rpmProblem

Definition at line 84 of file rpmps.c.

References rpmpsNumProblems().

Referenced by rpmps_iternext(), rpmps_subscript(), rpmpsPrint(), rpmts_Check(), rpmts_Run(), and verifyDependencies().

int rpmpsTrim ( rpmps  ps,
rpmps  filter 
)

Filter a problem set.

As the problem sets are generated in an order solely dependent on the ordering of the packages in the transaction, and that ordering can't be changed, the problem sets must be parallel to one another. Additionally, the filter set must be a subset of the target set, given the operations available on transaction set. This is good, as it lets us perform this trim in linear time, rather then logarithmic or quadratic.

Parameters:
psproblem set
filterproblem filter (or NULL)
Returns:
0 no problems, 1 if problems remain

Definition at line 171 of file rpmps.c.

References XSTRCMP.

Referenced by rpmtsRun().

static int sameProblem ( const rpmProblem  ap,
const rpmProblem  bp 
) [static]

Definition at line 330 of file rpmps.c.

Referenced by rpmpsPrint().

static int snprintf ( char *  buf,
int  nb,
const char *  fmt,
  ... 
) [inline, static]
static int vsnprintf ( char *  buf,
int  nb,
const char *  fmt,
va_list  ap 
) [inline, static]

Definition at line 217 of file rpmps.c.

Referenced by output(), and snprintf().


Variable Documentation

int _rpmps_debug = 0

Definition at line 24 of file rpmps.c.

Referenced by rpmpsGetPool().