csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
2ff057
#ifndef _RPMPROB_H
2ff057
#define _RPMPROB_H
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * \file lib/rpmprob.h
2ff057
 * Structures and prototypes used for an rpm problem item.
2ff057
 */
2ff057
2ff057
#include <stdio.h>
2ff057
#include <rpm/rpmtypes.h>
2ff057
2ff057
#ifdef __cplusplus
2ff057
extern "C" {
2ff057
#endif
2ff057
2ff057
typedef struct rpmProblem_s * rpmProblem;
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * @todo Generalize filter mechanism.
2ff057
 */
2ff057
enum rpmprobFilterFlags_e {
2ff057
    RPMPROB_FILTER_NONE		= 0,
2ff057
    RPMPROB_FILTER_IGNOREOS	= (1 << 0),	/*!< from --ignoreos */
2ff057
    RPMPROB_FILTER_IGNOREARCH	= (1 << 1),	/*!< from --ignorearch */
2ff057
    RPMPROB_FILTER_REPLACEPKG	= (1 << 2),	/*!< from --replacepkgs */
2ff057
    RPMPROB_FILTER_FORCERELOCATE= (1 << 3),	/*!< from --badreloc */
2ff057
    RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),	/*!< from --replacefiles */
2ff057
    RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),	/*!< from --replacefiles */
2ff057
    RPMPROB_FILTER_OLDPACKAGE	= (1 << 6),	/*!< from --oldpackage */
2ff057
    RPMPROB_FILTER_DISKSPACE	= (1 << 7),	/*!< from --ignoresize */
2ff057
    RPMPROB_FILTER_DISKNODES	= (1 << 8),	/*!< from --ignoresize */
2ff057
    RPMPROB_FILTER_VERIFY	= (1 << 9),	/*!< from --noverify */
2ff057
};
2ff057
2ff057
typedef rpmFlags rpmprobFilterFlags;
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Enumerate transaction set problem types.
2ff057
 */
2ff057
typedef enum rpmProblemType_e {
2ff057
    RPMPROB_BADARCH,	/*!< package ... is for a different architecture */
2ff057
    RPMPROB_BADOS,	/*!< package ... is for a different operating system */
2ff057
    RPMPROB_PKG_INSTALLED, /*!< package ... is already installed */
2ff057
    RPMPROB_BADRELOCATE,/*!< path ... is not relocatable for package ... */
2ff057
    RPMPROB_REQUIRES,	/*!< package ... has unsatisfied Requires: ... */
2ff057
    RPMPROB_CONFLICT,	/*!< package ... has unsatisfied Conflicts: ... */
2ff057
    RPMPROB_NEW_FILE_CONFLICT, /*!< file ... conflicts between attempted installs of ... */
2ff057
    RPMPROB_FILE_CONFLICT,/*!< file ... from install of ... conflicts with file from package ... */
2ff057
    RPMPROB_OLDPACKAGE,	/*!< package ... (which is newer than ...) is already installed */
2ff057
    RPMPROB_DISKSPACE,	/*!< installing package ... needs ... on the ... filesystem */
2ff057
    RPMPROB_DISKNODES,	/*!< installing package ... needs ... on the ... filesystem */
2ff057
    RPMPROB_OBSOLETES,	/*!< package ... is obsoleted by ... */
2ff057
    RPMPROB_VERIFY,	/*!< package did not pass verification */
2ff057
 } rpmProblemType;
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Create a problem item.
2ff057
 * @param type		type of problem
2ff057
 * @param pkgNEVR	package name
2ff057
 * @param key		filename or python object address
2ff057
 * @param altNEVR	related (e.g. through a dependency) package name
2ff057
 * @param str		generic string attribute
2ff057
 * @param number	generic number attribute
2ff057
 * @return		rpmProblem
2ff057
 */
2ff057
rpmProblem rpmProblemCreate(rpmProblemType type,
2ff057
                            const char * pkgNEVR, fnpyKey key,
2ff057
                            const char * altNEVR,
2ff057
                            const char * str, uint64_t number);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Destroy a problem item.
2ff057
 * @param prob		rpm problem
2ff057
 * @return		rpm problem (NULL)
2ff057
 */
2ff057
rpmProblem rpmProblemFree(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Reference an rpmProblem instance
2ff057
 * @param prob		rpm problem
2ff057
 * @return		rpm problem
2ff057
 */
2ff057
rpmProblem rpmProblemLink(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Compare two problems for equality.
2ff057
 * @param ap		1st problem
2ff057
 * @param bp		2nd problem
2ff057
 * @return		1 if the problems differ, 0 otherwise
2ff057
 */
2ff057
int rpmProblemCompare(rpmProblem ap, rpmProblem bp);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return package NEVR
2ff057
 * @param prob		rpm problem
2ff057
 * @return		package NEVR
2ff057
 */
2ff057
2ff057
const char * rpmProblemGetPkgNEVR(rpmProblem prob);
2ff057
/** \ingroup rpmprob
2ff057
 * Return related (e.g. through a dependency) package NEVR
2ff057
 * @param prob		rpm problem
2ff057
 * @return		related (e.g. through a dependency) package NEVR
2ff057
 */
2ff057
const char * rpmProblemGetAltNEVR(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return type of problem (dependency, diskpace etc)
2ff057
 * @param prob		rpm problem
2ff057
 * @return		type of problem
2ff057
 */
2ff057
2ff057
rpmProblemType rpmProblemGetType(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return filename or python object address of a problem
2ff057
 * @param prob		rpm problem
2ff057
 * @return		filename or python object address
2ff057
 */
2ff057
fnpyKey rpmProblemGetKey(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return a generic data string from a problem
2ff057
 * @param prob		rpm problem
2ff057
 * @return		a generic data string
2ff057
 * @todo		needs a better name
2ff057
 */
2ff057
const char * rpmProblemGetStr(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return disk requirement (needed disk space / number of inodes)
2ff057
 * depending on problem type. On problem types other than RPMPROB_DISKSPACE
2ff057
 * and RPMPROB_DISKNODES return value is undefined.
2ff057
 * @param prob		rpm problem
2ff057
 * @return		disk requirement
2ff057
 */
2ff057
rpm_loff_t rpmProblemGetDiskNeed(rpmProblem prob);
2ff057
2ff057
/** \ingroup rpmprob
2ff057
 * Return formatted string representation of a problem.
2ff057
 * @param prob		rpm problem
2ff057
 * @return		formatted string (malloc'd)
2ff057
 */
2ff057
char * rpmProblemString(rpmProblem prob);
2ff057
2ff057
#ifdef __cplusplus
2ff057
}
2ff057
#endif
2ff057
2ff057
#endif	/* _RPMPROB_H */