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