Replace verified header tracking bitfield with a hash table
[platform/upstream/rpm.git] / lib / rpmdb_internal.h
1 #ifndef H_RPMDB_INTERNAL
2 #define H_RPMDB_INTERNAL
3
4 #include <assert.h>
5 #include <db.h>
6
7 #include <rpm/rpmsw.h>
8 #include <rpm/rpmtypes.h>
9 #include <rpm/rpmutil.h>
10 #include "lib/backend/dbi.h"
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 /** \ingroup rpmdb
17  * Reference a database instance.
18  * @param db            rpm database
19  * @return              new rpm database reference
20  */
21 rpmdb rpmdbLink(rpmdb db);
22
23 /** \ingroup rpmdb
24  * Open rpm database.
25  * @param prefix        path to top of install tree
26  * @retval dbp          address of rpm database
27  * @param mode          open(2) flags:  O_RDWR or O_RDONLY (O_CREAT also)
28  * @param perms         database permissions
29  * @return              0 on success
30  */
31 RPM_GNUC_INTERNAL
32 int rpmdbOpen (const char * prefix, rpmdb * dbp, int mode, int perms);
33
34 /** \ingroup rpmdb
35  * Initialize database.
36  * @param prefix        path to top of install tree
37  * @param perms         database permissions
38  * @return              0 on success
39  */
40 RPM_GNUC_INTERNAL
41 int rpmdbInit(const char * prefix, int perms);
42
43 /** \ingroup rpmdb
44  * Close all database indices and free rpmdb.
45  * @param db            rpm database
46  * @return              0 on success
47  */
48 RPM_GNUC_INTERNAL
49 int rpmdbClose (rpmdb db);
50
51 /** \ingroup rpmdb
52  * Sync all database indices.
53  * @param db            rpm database
54  * @return              0 on success
55  */
56 RPM_GNUC_INTERNAL
57 int rpmdbSync (rpmdb db);
58
59 /** \ingroup rpmdb
60  * Rebuild database indices from package headers.
61  * @param prefix        path to top of install tree
62  * @param ts            transaction set (or NULL)
63  * @param (*hdrchk)     headerCheck() vector (or NULL)
64  * @return              0 on success
65  */
66 RPM_GNUC_INTERNAL
67 int rpmdbRebuild(const char * prefix, rpmts ts,
68                 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));
69
70 /** \ingroup rpmdb
71  * Verify database components.
72  * @param prefix        path to top of install tree
73  * @return              0 on success
74  */
75 RPM_GNUC_INTERNAL
76 int rpmdbVerify(const char * prefix);
77
78 /** \ingroup rpmdb
79  * Add package header to rpm database and indices.
80  * @param db            rpm database
81  * @param h             header
82  * @return              0 on success
83  */
84 RPM_GNUC_INTERNAL
85 int rpmdbAdd(rpmdb db, Header h);
86
87 /** \ingroup rpmdb
88  * Remove package header from rpm database and indices.
89  * @param db            rpm database
90  * @param hdrNum        package instance number in database
91  * @return              0 on success
92  */
93 RPM_GNUC_INTERNAL
94 int rpmdbRemove(rpmdb db, unsigned int hdrNum);
95
96 /** \ingroup rpmdb
97  * Return rpmdb home directory (depending on chroot state)
98  * param db             rpmdb handle
99  * return               db home directory (or NULL on error)
100  */
101 RPM_GNUC_INTERNAL
102 const char *rpmdbHome(rpmdb db);
103
104 /** \ingroup rpmdb
105  * Return database iterator.
106  * @param mi            rpm database iterator
107  * @param keyp          key data (NULL for sequential access)
108  * @param keylen        key data length (0 will use strlen(keyp))
109  * @return              0 on success
110  */
111 int rpmdbExtendIterator(rpmdbMatchIterator mi,
112                         const void * keyp, size_t keylen);
113
114 /** \ingroup rpmdb
115  * sort the iterator by (recnum, filenum)
116  * Return database iterator.
117  * @param mi            rpm database iterator
118  */
119 void rpmdbSortIterator(rpmdbMatchIterator mi);
120
121 /** \ingroup rpmdb
122  * Remove items from set of package instances to iterate.
123  * @note Sorted hdrNums are always passed in rpmlib.
124  * @param mi            rpm database iterator
125  * @param hdrNums       hash of package instances
126  * @return              0 on success, 1 on failure (bad args)
127  */
128 int rpmdbPruneIterator(rpmdbMatchIterator mi, intHash hdrNums);
129
130 /** \ingroup rpmdb
131  * Create a new, empty match iterator (for purposes of extending it
132  * through other means)
133  * @param db            rpm database
134  * @param dbitag        database index tag
135  * @return              empty match iterator
136  */
137 RPM_GNUC_INTERNAL
138 rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag);
139
140 #ifndef __APPLE__
141 /**
142  *  * Mergesort, same arguments as qsort(2).
143  *   */
144 RPM_GNUC_INTERNAL
145 int mergesort(void *base, size_t nmemb, size_t size,
146                 int (*cmp) (const void *, const void *));
147 #else
148 /* mergesort is defined in stdlib.h on Mac OS X */
149 #endif /* __APPLE__ */
150
151 #ifdef __cplusplus
152 }
153 #endif
154
155 #endif