Split dbiIndex out of rpmdb_internal.h into header of its own
[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 /** \ingroup rpmdb
13  * Describes the collection of index databases used by rpm.
14  */
15 struct rpmdb_s {
16     char        * db_root;/*!< path prefix */
17     char        * db_home;/*!< directory path */
18     char        * db_fullpath;  /*!< full db path including prefix */
19     int         db_flags;
20     int         db_mode;        /*!< open mode */
21     int         db_perms;       /*!< open permissions */
22     int         db_api;         /*!< Berkeley API type */
23     int         db_remove_env;
24     int         db_chrootDone;  /*!< If chroot(2) done, ignore db_root. */
25     int         db_mkdirDone;   /*!< Has db_home been created? */
26     unsigned char * db_bits;    /*!< package instance bit mask. */
27     int         db_nbits;       /*!< no. of bits in mask. */
28     rpmdb       db_next;
29     int         db_opens;
30     void *      db_dbenv;       /*!< Berkeley DB_ENV handle. */
31     int         db_ndbi;        /*!< No. of tag indices. */
32     dbiIndex * _dbi;            /*!< Tag indices. */
33
34     struct rpmop_s db_getops;
35     struct rpmop_s db_putops;
36     struct rpmop_s db_delops;
37
38     int nrefs;                  /*!< Reference count. */
39 };
40
41 /* for RPM's internal use only */
42
43 /** \ingroup rpmdb
44  */
45 enum rpmdbFlags {
46         RPMDB_FLAG_JUSTCHECK    = (1 << 0),
47         RPMDB_FLAG_MINIMAL      = (1 << 1),
48         RPMDB_FLAG_CHROOT       = (1 << 2)
49 };
50
51 #ifdef __cplusplus
52 extern "C" {
53 #endif
54
55 /** \ingroup rpmdb
56  * Return rpmdb home directory (depending on chroot state)
57  * param db             rpmdb handle
58  * return               db home directory (or NULL on error)
59  */
60 RPM_GNUC_INTERNAL
61 const char *rpmdbHome(rpmdb db);
62
63 /** \ingroup rpmdb
64  * Return database iterator.
65  * @param mi            rpm database iterator
66  * @param keyp          key data (NULL for sequential access)
67  * @param keylen        key data length (0 will use strlen(keyp))
68  * @return              0 on success
69  */
70 int rpmdbExtendIterator(rpmdbMatchIterator mi,
71                         const void * keyp, size_t keylen);
72
73 /** \ingroup rpmdb
74  * sort the iterator by (recnum, filenum)
75  * Return database iterator.
76  * @param mi            rpm database iterator
77  */
78 void rpmdbSortIterator(rpmdbMatchIterator mi);
79
80 #ifndef __APPLE__
81 /**
82  *  * Mergesort, same arguments as qsort(2).
83  *   */
84 RPM_GNUC_INTERNAL
85 int mergesort(void *base, size_t nmemb, size_t size,
86                 int (*cmp) (const void *, const void *));
87 #else
88 /* mergesort is defined in stdlib.h on Mac OS X */
89 #endif /* __APPLE__ */
90
91 #endif