9 #include <rpm/rpmtypes.h>
10 #include <rpm/rpmsw.h>
17 * Tag value pattern match mode.
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) */
26 typedef enum rpmdbOpX_e {
33 typedef enum rpmdbCtrlOp_e {
34 RPMDB_CTRL_LOCK_RO = 1,
35 RPMDB_CTRL_UNLOCK_RO = 2,
36 RPMDB_CTRL_LOCK_RW = 3,
37 RPMDB_CTRL_UNLOCK_RW = 4,
38 RPMDB_CTRL_INDEXSYNC = 5
42 * Retrieve operation timestamp from rpm database.
43 * @param db rpm database
44 * @param opx operation timestamp index
45 * @return pointer to operation timestamp.
47 rpmop rpmdbOp(rpmdb db, rpmdbOpX opx);
50 * Open all database indices.
51 * @param db rpm database
52 * @return 0 on success
54 int rpmdbOpenAll (rpmdb db);
57 * Return number of instances of package in rpm database.
58 * @param db rpm database
59 * @param name rpm package name
60 * @return number of instances
62 int rpmdbCountPackages(rpmdb db, const char * name);
65 * Return header join key for current position of rpm database iterator.
66 * @param mi rpm database iterator
67 * @return current header join key
69 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi);
72 * Return number of elements in rpm database iterator.
73 * @param mi rpm database iterator
74 * @return number of elements
76 int rpmdbGetIteratorCount(rpmdbMatchIterator mi);
80 unsigned int rpmdbGetIteratorFileNum(rpmdbMatchIterator mi);
83 * Append items to set of package instances to iterate.
84 * @param mi rpm database iterator
85 * @param hdrNums array of package instances
86 * @param nHdrNums number of elements in array
87 * @return 0 on success, 1 on failure (bad args)
89 int rpmdbAppendIterator(rpmdbMatchIterator mi,
90 const unsigned int * hdrNums, unsigned int nHdrNums);
93 * Add pattern to iterator selector.
94 * @param mi rpm database iterator
96 * @param mode type of pattern match
97 * @param pattern pattern to match
98 * @return 0 on success
100 int rpmdbSetIteratorRE(rpmdbMatchIterator mi, rpmTagVal tag,
101 rpmMireMode mode, const char * pattern);
104 * Prepare iterator for lazy writes.
105 * @note Must be called before rpmdbNextIterator() with CDB model database.
106 * @param mi rpm database iterator
107 * @param rewrite new value of rewrite
108 * @return previous value
110 int rpmdbSetIteratorRewrite(rpmdbMatchIterator mi, int rewrite);
113 * Modify iterator to mark header for lazy write on release.
114 * @param mi rpm database iterator
115 * @param modified new value of modified
116 * @return previous value
118 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified);
121 * Modify iterator to verify retrieved header blobs.
122 * @param mi rpm database iterator
123 * @param ts transaction set
124 * @param (*hdrchk) headerCheck() vector
127 int rpmdbSetHdrChk(rpmdbMatchIterator mi, rpmts ts,
128 rpmRC (*hdrchk) (rpmts ts, const void * uh, size_t uc, char ** msg));
131 * Return database iterator.
132 * @param db rpm database
133 * @param rpmtag database index tag
134 * @param keyp key data (NULL for sequential access)
135 * @param keylen key data length (0 will use strlen(keyp))
136 * @return NULL on failure
138 rpmdbMatchIterator rpmdbInitIterator(rpmdb db, rpmDbiTagVal rpmtag,
139 const void * keyp, size_t keylen);
142 * Return next package header from iteration.
143 * @param mi rpm database iterator
144 * @return NULL on end of iteration.
146 Header rpmdbNextIterator(rpmdbMatchIterator mi);
149 * Destroy rpm database iterator.
150 * @param mi rpm database iterator
151 * @return NULL always
153 rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
156 * Get an iterator for an index
157 * @param db rpm database
158 * @param rpmtag the index to iterate over
159 * @return the index iterator
161 rpmdbIndexIterator rpmdbIndexIteratorInit(rpmdb db, rpmDbiTag rpmtag);
164 * Get the next key - Warning! Keys are not zero terminated!
165 * Binary tags may even contain zero bytes
166 * @param ii index iterator
167 * @param key address to save the pointer to the key
168 * @param keylen address to save the length of the key to
169 * @return 0 on success; != 0 on error or end of index
171 int rpmdbIndexIteratorNext(rpmdbIndexIterator ii, const void ** key, size_t * keylen);
174 * Get the next key into a tag data container.
175 * Caller is responsible for calling rpmtdFreeData() to freeing the
176 * data returned in keytd once done with it.
177 * @param ii index iterator
178 * @param keytd tag container to store the key in
179 * @return 0 on success; != 0 on error or end of index
181 int rpmdbIndexIteratorNextTd(rpmdbIndexIterator ii, rpmtd keytd);
184 * Get number of entries for current key
185 * @param ii index iterator
186 * @return number of entries. 0 on error.
188 unsigned int rpmdbIndexIteratorNumPkgs(rpmdbIndexIterator ii);
191 * Get package offset of entry
192 * @param ii index iterator
193 * @param nr number of the entry
194 * @return db offset of pkg
196 unsigned int rpmdbIndexIteratorPkgOffset(rpmdbIndexIterator ii, unsigned int nr);
199 * Get tag number of entry
200 * @param ii index iterator
201 * @param nr number of the entry
202 * @return number of tag within the package
204 unsigned int rpmdbIndexIteratorTagNum(rpmdbIndexIterator ii, unsigned int nr);
207 * Free index iterator
208 * @param ii index iterator
211 rpmdbIndexIterator rpmdbIndexIteratorFree(rpmdbIndexIterator ii);
214 * manipulate the rpm database
215 * @param db rpm database
216 * @param ctrl operation
217 * @return 0 on success; != 0 on error
219 int rpmdbCtrl(rpmdb db, rpmdbCtrlOp ctrl);