1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
#ifndef _RPMPROB_H
#define _RPMPROB_H
/** \ingroup rpmprob
* \file lib/rpmprob.h
* Structures and prototypes used for an rpm problem item.
*/
#include <stdio.h>
#include <rpm/rpmtypes.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct rpmProblem_s * rpmProblem;
/** \ingroup rpmprob
* @todo Generalize filter mechanism.
*/
typedef enum rpmprobFilterFlags_e {
RPMPROB_FILTER_NONE = 0,
RPMPROB_FILTER_IGNOREOS = (1 << 0), /*!< from --ignoreos */
RPMPROB_FILTER_IGNOREARCH = (1 << 1), /*!< from --ignorearch */
RPMPROB_FILTER_REPLACEPKG = (1 << 2), /*!< from --replacepkgs */
RPMPROB_FILTER_FORCERELOCATE= (1 << 3), /*!< from --badreloc */
RPMPROB_FILTER_REPLACENEWFILES= (1 << 4), /*!< from --replacefiles */
RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5), /*!< from --replacefiles */
RPMPROB_FILTER_OLDPACKAGE = (1 << 6), /*!< from --oldpackage */
RPMPROB_FILTER_DISKSPACE = (1 << 7), /*!< from --ignoresize */
RPMPROB_FILTER_DISKNODES = (1 << 8) /*!< from --ignoresize */
} rpmprobFilterFlags;
/** \ingroup rpmprob
* Enumerate transaction set problem types.
*/
typedef enum rpmProblemType_e {
RPMPROB_BADARCH, /*!< package ... is for a different architecture */
RPMPROB_BADOS, /*!< package ... is for a different operating system */
RPMPROB_PKG_INSTALLED, /*!< package ... is already installed */
RPMPROB_BADRELOCATE,/*!< path ... is not relocatable for package ... */
RPMPROB_REQUIRES, /*!< package ... has unsatisfied Requires: ... */
RPMPROB_CONFLICT, /*!< package ... has unsatisfied Conflicts: ... */
RPMPROB_NEW_FILE_CONFLICT, /*!< file ... conflicts between attemped installs of ... */
RPMPROB_FILE_CONFLICT,/*!< file ... from install of ... conflicts with file from package ... */
RPMPROB_OLDPACKAGE, /*!< package ... (which is newer than ...) is already installed */
RPMPROB_DISKSPACE, /*!< installing package ... needs ... on the ... filesystem */
RPMPROB_DISKNODES, /*!< installing package ... needs ... on the ... filesystem */
RPMPROB_OBSOLETES, /*!< package ... is obsoleted by ... */
} rpmProblemType;
/** \ingroup rpmprob
* Create a problem item.
* @param type type of problem
* @param pkgNEVR package name
* @param key filename or python object address
* @param dn directory name
* @param bn file base name
* @param altNEVR related (e.g. through a dependency) package name
* @param number generic number attribute
* @return rpmProblem
*/
rpmProblem rpmProblemCreate(rpmProblemType type,
const char * pkgNEVR,
fnpyKey key,
const char * dn, const char * bn,
const char * altNEVR,
uint64_t number);
/** \ingroup rpmprob
* Destroy a problem item.
* @param prob rpm problem
* @return rpm problem (NULL)
*/
rpmProblem rpmProblemFree(rpmProblem prob);
/** \ingroup rpmprob
* Reference an rpmProblem instance
* @param prob rpm problem
* @return rpm problem
*/
rpmProblem rpmProblemLink(rpmProblem prob);
/** \ingroup rpmprob
* Unreference an rpmProblem instance
* @param prob rpm problem
* @return rpm problem
*/
rpmProblem rpmProblemUnlink(rpmProblem prob);
/** \ingroup rpmprob
* Compare two problems for equality.
* @param ap 1st problem
* @param bp 2nd problem
* @return 1 if the problems differ, 0 otherwise
*/
int rpmProblemCompare(rpmProblem ap, rpmProblem bp);
/** \ingroup rpmprob
* Return package NEVR
* @param prob rpm problem
* @return package NEVR
*/
const char * rpmProblemGetPkgNEVR(rpmProblem prob);
/** \ingroup rpmprob
* Return related (e.g. through a dependency) package NEVR
* @param prob rpm problem
* @return related (e.g. through a dependency) package NEVR
*/
const char * rpmProblemGetAltNEVR(rpmProblem prob);
/** \ingroup rpmprob
* Return type of problem (dependency, diskpace etc)
* @param prob rpm problem
* @return type of problem
*/
rpmProblemType rpmProblemGetType(rpmProblem prob);
/** \ingroup rpmprob
* Return filename or python object address of a problem
* @param prob rpm problem
* @return filename or python object address
*/
fnpyKey rpmProblemGetKey(rpmProblem prob);
/** \ingroup rpmprob
* Return a generic data string from a problem
* @param prob rpm problem
* @return a generic data string
* @todo needs a better name
*/
const char * rpmProblemGetStr(rpmProblem prob);
/** \ingroup rpmprob
* Return disk requirement (needed disk space / number of inodes)
* depending on problem type. On problem types other than RPMPROB_DISKSPACE
* and RPMPROB_DISKNODES return value is undefined.
* @param prob rpm problem
* @return disk requirement
*/
rpm_loff_t rpmProblemGetDiskNeed(rpmProblem prob);
/** \ingroup rpmprob
* Return formatted string representation of a problem.
* @param prob rpm problem
* @return formatted string (malloc'd)
*/
char * rpmProblemString(rpmProblem prob);
#ifdef __cplusplus
}
#endif
#endif /* _RPMPROB_H */
|