1 #ifndef H_RPMDB_INTERNAL
2 #define H_RPMDB_INTERNAL
8 #include <rpm/rpmtypes.h>
9 #include <rpm/rpmutil.h>
10 #include "lib/backend/dbi.h"
19 #define HASHTYPE removedHash
20 #define HTKEYTYPE unsigned int
21 #define HTDATATYPE struct rpmte_s *
28 * Reference a database instance.
29 * @param db rpm database
30 * @return new rpm database reference
32 rpmdb rpmdbLink(rpmdb db);
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
43 int rpmdbOpen (const char * prefix, rpmdb * dbp, int mode, int perms);
46 * Initialize database.
47 * @param prefix path to top of install tree
48 * @param perms database permissions
49 * @return 0 on success
52 int rpmdbInit(const char * prefix, int perms);
55 * Close all database indices and free rpmdb.
56 * @param db rpm database
57 * @return 0 on success
60 int rpmdbClose (rpmdb db);
63 * Sync all database indices.
64 * @param db rpm database
65 * @return 0 on success
68 int rpmdbSync (rpmdb db);
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
78 int rpmdbRebuild(const char * prefix, rpmts ts,
79 rpmRC (*hdrchk) (rpmts ts, const void *uh, size_t uc, char ** msg));
82 * Verify database components.
83 * @param prefix path to top of install tree
84 * @return 0 on success
87 int rpmdbVerify(const char * prefix);
90 * Add package header to rpm database and indices.
91 * @param db rpm database
93 * @return 0 on success
96 int rpmdbAdd(rpmdb db, Header h);
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
105 int rpmdbRemove(rpmdb db, unsigned int hdrNum);
108 * Return rpmdb home directory (depending on chroot state)
109 * param db rpmdb handle
110 * return db home directory (or NULL on error)
113 const char *rpmdbHome(rpmdb db);
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
122 int rpmdbExtendIterator(rpmdbMatchIterator mi,
123 const void * keyp, size_t keylen);
126 * sort the iterator by (recnum, filenum)
127 * Return database iterator.
128 * @param mi rpm database iterator
130 void rpmdbSortIterator(rpmdbMatchIterator mi);
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)
139 int rpmdbPruneIterator(rpmdbMatchIterator mi, removedHash hdrNums);
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
149 rpmdbMatchIterator rpmdbNewIterator(rpmdb db, rpmDbiTagVal dbitag);
153 * * Mergesort, same arguments as qsort(2).
156 int mergesort(void *base, size_t nmemb, size_t size,
157 int (*cmp) (const void *, const void *));
159 /* mergesort is defined in stdlib.h on Mac OS X */
160 #endif /* __APPLE__ */