[4.0] Use strip (instead of eu-strip) to support --strip-debug of *.so at build time
[platform/upstream/rpm.git] / lib / rpmdb.h
1 #ifndef H_RPMDB
2 #define H_RPMDB
3
4 /** \ingroup rpmdb dbi
5  * \file lib/rpmdb.h
6  * Access RPM indices using Berkeley DB interface(s).
7  */
8
9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmsw.h>
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 /**
17  * Tag value pattern match mode.
18  */
19 typedef enum rpmMireMode_e {
20     RPMMIRE_DEFAULT     = 0,    /*!< regex with \., .* and ^...$ added */
21     RPMMIRE_STRCMP      = 1,    /*!< strings  using strcmp(3) */
22     RPMMIRE_REGEX       = 2,    /*!< regex(7) patterns through regcomp(3) */
23     RPMMIRE_GLOB        = 3     /*!< glob(7) patterns through fnmatch(3) */
24 } rpmMireMode;
25
26 typedef enum rpmdbOpX_e {
27     RPMDB_OP_DBGET              = 1,
28     RPMDB_OP_DBPUT              = 2,
29     RPMDB_OP_DBDEL              = 3,
30     RPMDB_OP_MAX                = 4
31 } rpmdbOpX;
32
33 /** \ingroup rpmdb
34  * Retrieve operation timestamp from rpm database.
35  * @param db            rpm database
36  * @param opx           operation timestamp index
37  * @return              pointer to operation timestamp.
38  */
39 rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
40
41 /** \ingroup rpmdb
42  * Open all database indices.
43  * @param db            rpm database
44  * @return              0 on success
45  */
46 int rpmdbOpenAll (rpmdb db);
47
48 /** \ingroup rpmdb
49  * Return number of instances of package in rpm database.
50  * @param db            rpm database
51  * @param name          rpm package name
52  * @return              number of instances
53  */
54 int rpmdbCountPackages(rpmdb db, const char * name);
55
56 /** \ingroup rpmdb
57  * Return header join key for current position of rpm database iterator.
58  * @param mi            rpm database iterator
59  * @return              current header join key
60  */
61 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
62
63 /** \ingroup rpmdb
64  * Return number of elements in rpm database iterator.
65  * @param mi            rpm database iterator
66  * @return              number of elements
67  */
68 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
69
70 /** \ingroup rpmdb
71  */
72 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
73
74 /** \ingroup rpmdb
75  * Append items to set of package instances to iterate.
76  * @param mi            rpm database iterator
77  * @param hdrNums       array of package instances
78  * @param nHdrNums      number of elements in array
79  * @return              0 on success, 1 on failure (bad args)
80  */
81 int rpmdbAppendIterator(rpmdbMatchIterator mi,
82                 const int * hdrNums, int nHdrNums);
83
84 /** \ingroup rpmdb
85  * Add pattern to iterator selector.
86  * @param mi            rpm database iterator
87  * @param tag           rpm tag
88  * @param mode          type of pattern match
89  * @param pattern       pattern to match
90  * @return              0 on success
91  */
92 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag,
93                 rpmMireMode mode, const char * pattern);
94
95 /** \ingroup rpmdb
96  * Prepare iterator for lazy writes.
97  * @note Must be called before rpmdbNextIterator() with CDB model database.
98  * @param mi            rpm database iterator
99  * @param rewrite       new value of rewrite
100  * @return              previous value
101  */
102 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
103
104 /** \ingroup rpmdb
105  * Modify iterator to mark header for lazy write on release.
106  * @param mi            rpm database iterator
107  * @param modified      new value of modified
108  * @return              previous value
109  */
110 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
111
112 /** \ingroup rpmdb
113  * Modify iterator to verify retrieved header blobs.
114  * @param mi            rpm database iterator
115  * @param ts            transaction set
116  * @param (*hdrchk)     headerCheck() vector
117  * @return              0 always
118  */
119 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
120         rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
121
122 /** \ingroup rpmdb
123  * Return database iterator.
124  * @param db            rpm database
125  * @param rpmtag        database index tag
126  * @param keyp          key data (NULL for sequential access)
127  * @param keylen        key data length (0 will use strlen(keyp))
128  * @return              NULL on failure
129  */
130 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
131                         const void * keyp, size_t keylen);
132
133 /** \ingroup rpmdb
134  * Return next package header from iteration.
135  * @param mi            rpm database iterator
136  * @return              NULL on end of iteration.
137  */
138 Header rpmdbNextIterator(rpmdbMatchIterator mi);
139
140 /** \ingroup rpmdb
141  * Check for and exit on termination signals.
142  */
143 int rpmdbCheckSignals(void);
144
145 /** \ingroup rpmdb
146  * Check rpmdb signal handler for trapped signal and/or requested exit,
147  * clean up any open iterators and databases on termination condition.
148  * On non-zero exit any open references to rpmdb are invalid and cannot
149  * be accessed anymore, calling process should terminate immediately.
150  * @param terminate     0 to only check for signals, 1 to terminate anyway
151  * @return              0 to continue, 1 if termination cleanup was done.
152  */
153 int rpmdbCheckTerminate(int terminate);
154
155 /** \ingroup rpmdb
156  * Destroy rpm database iterator.
157  * @param mi            rpm database iterator
158  * @return              NULL always
159  */
160 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
161
162 /** \ingroup rpmdb
163  * Get an iterator for an index
164  * @param db            rpm database
165  * @param rpmtag        the index to iterate over
166  * @return              the index iterator
167  */
168 rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
169
170 /** \ingroup rpmdb
171  * Get the next key - Warning! Keys are not zero terminated!
172  * Binary tags may even contain zero bytes
173  * @param ii            index iterator
174  * @param key           adress to save the pointer to the key
175  * @param keylen        adress to save the length of the key to
176  * @return              0 on success; != 0 on error or end of index
177  */
178 int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
179
180 /** \ingroup rpmdb
181  * Get number of entries for current key
182  * @param ii            index iterator
183  * @return              number of entries. 0 on error.
184  */
185 unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii);
186
187 /** \ingroup rpmdb
188  * Get package offset of entry
189  * @param ii            index iterator
190  * @param nr            number of the entry
191  * @return              db offset of pkg
192  */
193 unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr);
194
195 /** \ingroup rpmdb
196  * Get tag number of entry
197  * @param ii            index iterator
198  * @param nr            number of the entry
199  * @return              number of tag within the package
200  */
201 unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
202
203 /** \ingroup rpmdb
204  * Free index iterator
205  * @param ii            index iterator
206  * return               NULL
207  */
208 rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);
209
210
211 #ifdef __cplusplus
212 }
213 #endif
214
215 #endif  /* H_RPMDB */