rpm  5.4.10
Macros | Typedefs | Functions | Variables
rpmdb.h File Reference

Access RPM indices using Berkeley DB interface(s). More...

#include <assert.h>
#include <mire.h>
#include <rpmtypes.h>
#include <rpmtag.h>
#include "db_emu.h"
#include <rpmio.h>
#include <rpmbf.h>
#include <rpmsw.h>
Include dependency graph for rpmdb.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define rpmdbUnlink(_db, _msg)   ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
 
#define rpmdbLink(_db, _msg)   ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))
 
#define rpmmiUnlink(_mi)   ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
 
#define rpmmiLink(_mi)   ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
 
#define rpmmiFree(_mi)   ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))
 

Typedefs

typedef struct _dbiIndexItem * dbiIndexItem
 
typedef struct _dbiIndexSet * dbiIndexSet
 A single element (i.e. More...
 
typedef struct _dbiIndex * dbiIndex
 

Functions

rpmdb rpmdbUnlink (rpmdb db, const char *msg)
 Unreference a database instance. More...
 
rpmdb rpmdbLink (rpmdb db, const char *msg)
 Reference a database instance. More...
 
rpmdb rpmdbNew (const char *root, const char *home, int mode, mode_t perms, int flags)
 
int rpmdbOpen (const char *prefix, rpmdb *dbp, int mode, mode_t perms)
 Open rpm database. More...
 
int rpmdbBlockDBI (rpmdb db, int tag)
 Block access to a single database index. More...
 
int rpmdbCloseDBI (rpmdb db, int tag)
 Close a single database index. More...
 
int rpmdbClose (rpmdb db)
 Close all database indices and free rpmdb. More...
 
int rpmdbOpenAll (rpmdb db)
 Open all database indices. More...
 
int rpmdbCount (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return number of instances of key in a tag index. More...
 
int rpmdbCountPackages (rpmdb db, const char *N)
 Return number of instances of package in Name index. More...
 
uint32_t rpmmiInstance (rpmmi mi)
 Return header instance for current position of rpmdb iterator. More...
 
uint32_t rpmmiBNTag (rpmmi mi)
 Return basename tag for current position of rpmdb iterator. More...
 
unsigned int rpmmiCount (rpmmi mi)
 Return number of elements in rpm database iterator. More...
 
int rpmmiGrow (rpmmi mi, const uint32_t *hdrNums, int nHdrNums)
 Append items to set of package instances to iterate. More...
 
int rpmmiGrowBasename (rpmmi mi, const char *bn)
 Append packages containing common basename to iterator. More...
 
int rpmmiSort (rpmmi mi)
 Sort iterator instances. More...
 
int rpmmiPrune (rpmmi mi, uint32_t *hdrNums, int nHdrNums, int sorted)
 Remove items from set of package instances to iterate. More...
 
int rpmmiAddPattern (rpmmi mi, rpmTag tag, rpmMireMode mode, const char *pattern)
 Add pattern to iterator selector. More...
 
int rpmmiSetRewrite (rpmmi mi, int rewrite)
 Prepare iterator for lazy writes. More...
 
int rpmmiSetModified (rpmmi mi, int modified)
 Modify iterator to mark header for lazy write on release. More...
 
rpmmi rpmmiInit (rpmdb db, rpmTag tag, const void *keyp, size_t keylen)
 Return database iterator. More...
 
Header rpmmiNext (rpmmi mi)
 Return next package header from iteration. More...
 
int rpmdbCheckTerminate (int terminate)
 Check rpmdb signal handler for trapped signal and/or requested exit. More...
 
int rpmdbCheckSignals (void)
 Check for and exit on termination signals. More...
 
rpmmi rpmmiUnlink (rpmmi mi)
 Unreference a rpm database iterator. More...
 
rpmmi rpmmiLink (rpmmi mi)
 Reference a rpm database iterator. More...
 
rpmmi rpmmiFree (rpmmi mi)
 Destroy rpm database iterator. More...
 
int rpmdbMireApply (rpmdb db, rpmTag tag, rpmMireMode mode, const char *pat, const char ***argvp)
 Return array of keys matching a pattern. More...
 
int rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts)
 Add package header to rpm database and indices. More...
 
int rpmdbRemove (rpmdb db, int rid, uint32_t hdrNum, rpmts ts)
 Remove package header from rpm database and indices. More...
 
int rpm_mergesort (void *base, size_t nmemb, size_t size, int(*cmp)(const void *, const void *))
 Mergesort, same arguments as qsort(2). More...
 

Variables

int _rpmdb_debug
 
int _rpmmi_debug
 

Detailed Description

Access RPM indices using Berkeley DB interface(s).

Definition in file rpmdb.h.

Macro Definition Documentation

§ rpmdbLink

#define rpmdbLink (   _db,
  _msg 
)    ((void *)rpmioLinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))

Definition at line 1157 of file rpmdb.h.

§ rpmdbUnlink

#define rpmdbUnlink (   _db,
  _msg 
)    ((rpmdb)rpmioUnlinkPoolItem((rpmioItem)(_db), _msg, __FILE__, __LINE__))

Definition at line 1145 of file rpmdb.h.

§ rpmmiFree

#define rpmmiFree (   _mi)    ((rpmmi)rpmioFreePoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))

Definition at line 1420 of file rpmdb.h.

§ rpmmiLink

#define rpmmiLink (   _mi)    ((rpmmi)rpmioLinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))

Definition at line 1408 of file rpmdb.h.

§ rpmmiUnlink

#define rpmmiUnlink (   _mi)    ((rpmmi)rpmioUnlinkPoolItem((rpmioItem)(_mi), __FUNCTION__, __FILE__, __LINE__))

Definition at line 1396 of file rpmdb.h.

Typedef Documentation

§ dbiIndex

typedef struct _dbiIndex* dbiIndex

Definition at line 58 of file rpmdb.h.

§ dbiIndexItem

typedef struct _dbiIndexItem* dbiIndexItem

Definition at line 49 of file rpmdb.h.

§ dbiIndexSet

typedef struct _dbiIndexSet* dbiIndexSet

A single element (i.e.

inverted list from tag values) of a database.

Definition at line 54 of file rpmdb.h.

Function Documentation

§ rpm_mergesort()

int rpm_mergesort ( void *  base,
size_t  nmemb,
size_t  size,
int(*)(const void *, const void *)  cmp 
)

Mergesort, same arguments as qsort(2).

Definition at line 213 of file merge.c.

References CCOPY_ELT, CCOPY_LIST, errno, EVAL, ICOPY_ELT, ICOPY_LIST, ISIZE, PSIZE, and setup().

Referenced by rpmmiSort().

§ rpmdbAdd()

int rpmdbAdd ( rpmdb  db,
int  iid,
Header  h,
rpmts  ts 
)

§ rpmdbBlockDBI()

int rpmdbBlockDBI ( rpmdb  db,
int  tag 
)

Block access to a single database index.

Parameters
dbrpm database
tagrpm tag (negative to block)
Returns
0 on success

Definition at line 821 of file rpmdb.c.

Referenced by rpmgiNext().

§ rpmdbCheckSignals()

int rpmdbCheckSignals ( void  )

§ rpmdbCheckTerminate()

int rpmdbCheckTerminate ( int  terminate)

Check rpmdb signal handler for trapped signal and/or requested exit.

Clean up any open iterators and databases on termination condition. On non-zero exit any open references to rpmdb are invalid and cannot be accessed anymore, calling process should terminate immediately.

Parameters
terminate0 to only check for signals, 1 to terminate anyway
Returns
0 to continue, 1 if termination cleanup was done.

Definition at line 476 of file rpmdb.c.

References rpmmi_s::mi_next, rpmdbClose(), rpmmiFree(), and rpmsqCaught.

Referenced by rpm_exithook(), rpmdbCheckSignals(), and rpmts_Die().

§ rpmdbClose()

int rpmdbClose ( rpmdb  db)

Close all database indices and free rpmdb.

Parameters
dbrpm database
Returns
0 on success

Definition at line 866 of file rpmdb.c.

References _free(), L, rpmdbCheckSignals(), rpmdbRock, rpmioPutPool(), rpmsqEnable(), and tagStoreFree().

Referenced by rpmdb_dealloc(), rpmdbCheckTerminate(), rpmdbOpenDatabase(), rpmmiFini(), rpmtsCloseDB(), and rpmtsCloseSDB().

§ rpmdbCloseDBI()

int rpmdbCloseDBI ( rpmdb  db,
int  tag 
)

Close a single database index.

Parameters
dbrpm database
tagrpm tag
Returns
0 on success

Definition at line 839 of file rpmdb.c.

Referenced by _rpmtsCheck().

§ rpmdbCount()

int rpmdbCount ( rpmdb  db,
rpmTag  tag,
const void *  keyp,
size_t  keylen 
)

Return number of instances of key in a tag index.

Parameters
dbrpm database
tagrpm tag
keypkey data
keylenkey data length (0 will use strlen(keyp))
Returns
number of instances

Definition at line 1188 of file rpmdb.c.

References _, __db_dbt::data, DB_NOTFOUND, DB_SET, dbiOpen(), rpmlog(), RPMLOG_ERR, __db_dbt::size, tagName(), and UINT32_T.

Referenced by rpmdbCountPackages().

§ rpmdbCountPackages()

int rpmdbCountPackages ( rpmdb  db,
const char *  N 
)

Return number of instances of package in Name index.

Parameters
dbrpm database
Nrpm package name
Returns
number of instances

Definition at line 1238 of file rpmdb.c.

References rpmdbCount(), and RPMTAG_NAME.

Referenced by handleOneScriptTrigger(), handleOneTrigger(), rpmpsmStage(), and runTriggers().

§ rpmdbLink()

rpmdb rpmdbLink ( rpmdb  db,
const char *  msg 
)

Reference a database instance.

Parameters
dbrpm database
msg
Returns
new rpm database reference

Referenced by rpmdbNew(), and rpmmiInit().

§ rpmdbMireApply()

int rpmdbMireApply ( rpmdb  db,
rpmTag  tag,
rpmMireMode  mode,
const char *  pat,
const char ***  argvp 
)

Return array of keys matching a pattern.

Parameters
dbrpm database
tagrpm tag
modetype of pattern match
patpattern to match
Return values
*argvparray of keys that match
Returns
0 on success

Definition at line 1482 of file rpmdb.c.

References dbiMireKeys(), and tagName().

Referenced by rpmdbTriggerGlobs(), rpmtsLoadNVRA(), rpmtsSanityCheck(), and runImmedTriggers().

§ rpmdbNew()

rpmdb rpmdbNew ( const char *  root,
const char *  home,
int  mode,
mode_t  perms,
int  flags 
)

§ rpmdbOpen()

int rpmdbOpen ( const char *  prefix,
rpmdb dbp,
int  mode,
mode_t  perms 
)

Open rpm database.

Parameters
prefixpath to top of install tree
Return values
dbpaddress of rpm database
Parameters
modeopen(2) flags: O_RDWR or O_RDONLY (O_CREAT also)
permsdatabase permissions
Returns
0 on success

Definition at line 1175 of file rpmdb.c.

References _DB_MAJOR, rpmdbOpenDatabase(), and rpmExpandNumeric().

Referenced by rpmtsFindPubkey(), rpmtsOpenDB(), and rpmtsOpenSDB().

§ rpmdbOpenAll()

int rpmdbOpenAll ( rpmdb  db)

Open all database indices.

Parameters
dbrpm database
Returns
0 on success

Definition at line 787 of file rpmdb.c.

References dbiOpen(), RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_BTREE, RPMDBI_DEPCACHE, RPMDBI_HASH, RPMDBI_HEAP, RPMDBI_QUEUE, RPMDBI_RECNO, and RPMDBI_REMOVED.

Referenced by rpmtsPrepare().

§ rpmdbRemove()

int rpmdbRemove ( rpmdb  db,
int  rid,
uint32_t  hdrNum,
rpmts  ts 
)

Remove package header from rpm database and indices.

Parameters
dbrpm database
rid(unused) remove transaction id (rid = 0 or -1 to skip)
hdrNumpackage instance number in database
ts(unused) transaction set (or NULL)
Returns
0 on success

Definition at line 2773 of file rpmdb.c.

References _, _free(), _hton_ui(), alloca(), blockSignals(), __db_dbt::data, DB_SET, DB_WRITECURSOR, dbiOpen(), headerFree(), headerGet(), headerLink(), _HE_s::p, rpmDataType_u::ptr, RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPCACHE, RPMDBI_PACKAGES, RPMDBI_REMOVED, RPMDBI_SEQNO, rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, rpmmiFree(), rpmmiInit(), rpmmiNext(), RPMRC_FAIL, RPMRC_OK, RPMTAG_NVRA, __db_dbt::size, rpmDataType_u::str, _HE_s::tag, _dbswap::ui, UINT32_T, and unblockSignals().

Referenced by rpmpsmStage(), and rpmtsRollback().

§ rpmdbUnlink()

rpmdb rpmdbUnlink ( rpmdb  db,
const char *  msg 
)

Unreference a database instance.

Parameters
dbrpm database
msg
Returns
NULL always

§ rpmmiAddPattern()

int rpmmiAddPattern ( rpmmi  mi,
rpmTag  tag,
rpmMireMode  mode,
const char *  pattern 
)

Add pattern to iterator selector.

Parameters
mirpm database iterator
tagrpm tag
modetype of pattern match
patternpattern to match
Returns
0 on success

Definition at line 1906 of file rpmdb.c.

References _free(), _mire_debug, _mirePool, rpmmi_s::mi_nre, rpmmi_s::mi_re, mireCmp(), mireDup(), mireFree(), mireGetPool(), mireLink(), mireNew(), mireRegcomp(), rpmExpand(), RPMMIRE_DEFAULT, RPMMIRE_GLOB, RPMMIRE_REGEX, RPMMIRE_STRCMP, tagName(), and xrealloc.

Referenced by IDTXload(), rpmgiInitFilter(), rpmmi_pattern(), rpmmi_Pattern(), and rpmpsmStage().

§ rpmmiBNTag()

uint32_t rpmmiBNTag ( rpmmi  mi)

Return basename tag for current position of rpmdb iterator.

Parameters
mirpm database iterator
Returns
current basename tag

Definition at line 1752 of file rpmdb.c.

References rpmmi_s::mi_bntag.

Referenced by rpmtsCheckInstalledFiles().

§ rpmmiCount()

unsigned int rpmmiCount ( rpmmi  mi)

Return number of elements in rpm database iterator.

Parameters
mirpm database iterator
Returns
number of elements

Definition at line 1759 of file rpmdb.c.

References __db_dbt::data, DB_SET, dbiOpen(), rpmmi_s::mi_cflags, rpmmi_s::mi_count, rpmmi_s::mi_db, rpmmi_s::mi_dbc, rpmmi_s::mi_keylen, rpmmi_s::mi_keyp, rpmmi_s::mi_primary, rpmmi_s::mi_rpmtag, __db_dbt::size, and UINT32_T.

Referenced by ftsCacheUpdate(), rpmcliInstall(), rpmmi_Count(), rpmmi_count_get(), rpmQueryVerify(), rpmts_AddErase(), and runImmedTriggers().

§ rpmmiFree()

rpmmi rpmmiFree ( rpmmi  mi)

§ rpmmiGrow()

int rpmmiGrow ( rpmmi  mi,
const uint32_t *  hdrNums,
int  nHdrNums 
)

Append items to set of package instances to iterate.

Parameters
mirpm database iterator
hdrNumsarray of package instances
nHdrNumsnumber of elements in array
Returns
0 on success, 1 on failure (bad args)

Definition at line 2475 of file rpmdb.c.

References dbiAppendSet(), rpmmi_s::mi_set, and xcalloc().

§ rpmmiGrowBasename()

int rpmmiGrowBasename ( rpmmi  mi,
const char *  bn 
)

Append packages containing common basename to iterator.

Parameters
mirpm database iterator
bnbasename key
Returns
0 on success, 1 on failure (bad args)

Definition at line 1491 of file rpmdb.c.

References dbiAppendSet(), dbiFreeIndexSet(), dbiMireKeys(), hashFunctionString(), rpmmi_s::mi_db, rpmmi_s::mi_rpmtag, rpmmi_s::mi_set, RPMMIRE_STRCMP, RPMTAG_BASENAMES, set(), and xcalloc().

Referenced by rpmtsFindBaseNamesInDB().

§ rpmmiInit()

rpmmi rpmmiInit ( rpmdb  db,
rpmTag  tag,
const void *  keyp,
size_t  keylen 
)

Return database iterator.

Parameters
dbrpm database
tagrpm tag
keypkey data (NULL for sequential access)
keylenkey data length (0 will use strlen(keyp))
Returns
NULL on failure

Definition at line 2491 of file rpmdb.c.

References _free(), _hton_ui(), _hton_us(), alloca(), __db_dbt::data, DB_SET, dbiFindMatches(), dbiFreeIndexSet(), dbiOpen(), headerFree(), headerGet(), headerLoad(), rpmmi_s::mi_cflags, rpmmi_s::mi_count, rpmmi_s::mi_db, rpmmi_s::mi_dbc, rpmmi_s::mi_h, rpmmi_s::mi_keylen, rpmmi_s::mi_keyp, rpmmi_s::mi_modified, rpmmi_s::mi_next, rpmmi_s::mi_nre, rpmmi_s::mi_offset, rpmmi_s::mi_prevoffset, rpmmi_s::mi_primary, rpmmi_s::mi_re, rpmmi_s::mi_rpmtag, rpmmi_s::mi_set, rpmmi_s::mi_setx, rpmmi_s::mi_sorted, _HE_s::p, rpmDataType_u::ptr, RPM_BIN_TYPE, RPM_I18NSTRING_TYPE, RPM_STRING_ARRAY_TYPE, RPM_STRING_TYPE, RPM_UINT16_TYPE, RPM_UINT32_TYPE, RPM_UINT64_TYPE, RPM_UINT8_TYPE, rpmdbCheckSignals(), RPMDBI_PACKAGES, rpmdbLink(), rpmioFreePoolItem(), rpmioLinkPoolItem(), rpmmiGetPool(), rpmmiRock, RPMRC_NOTFOUND, RPMTAG_ARCH, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, RPMTAG_DISTEPOCH, RPMTAG_DISTTAG, RPMTAG_FILEPATHS, RPMTAG_GROUP, RPMTAG_NAME, RPMTAG_NVRA, RPMTAG_OS, RPMTAG_PROVIDENAME, RPMTAG_RELEASE, RPMTAG_VERSION, set(), __db_dbt::size, stpcpy(), rpmDataType_u::str, _HE_s::tag, tagName(), tagType(), rpmDataType_u::ui16p, rpmDataType_u::ui32p, rpmDataType_u::ui64p, rpmDataType_u::ui8p, xcalloc(), xmalloc, xrealloc, and xstrdup().

Referenced by nwlookupTag(), rpmdb_length(), rpmdb_Match(), rpmdb_subscript(), rpmdbRemove(), rpmtsFindBaseNamesInDB(), rpmtsFindPubkey(), rpmtsInitIterator(), rpmtsSolve(), and wnlookupTag().

§ rpmmiInstance()

uint32_t rpmmiInstance ( rpmmi  mi)

Return header instance for current position of rpmdb iterator.

Parameters
mirpm database iterator
Returns
current header instance

Definition at line 1743 of file rpmdb.c.

References _ntoh_ui(), and rpmmi_s::mi_offset.

Referenced by IDTXload(), nwlookupTag(), rpmcliEraseElement(), rpmErase(), rpmgiNext(), rpmmi_Instance(), rpmmi_offset_get(), rpmpsmStage(), rpmts_AddErase(), rpmtsAddObsoletes(), rpmtsAddUpgrades(), rpmtsCheckInstalledFiles(), rpmtsEraseDebuginfo(), rpmtsFindPubkey(), runImmedTriggers(), runScriptTriggersLoop(), runTriggersLoop(), and wnlookupTag().

§ rpmmiLink()

rpmmi rpmmiLink ( rpmmi  mi)

Reference a rpm database iterator.

Parameters
mirpm database iterator
Returns
NULL on last dereference

§ rpmmiNext()

Header rpmmiNext ( rpmmi  mi)

§ rpmmiPrune()

int rpmmiPrune ( rpmmi  mi,
uint32_t *  hdrNums,
int  nHdrNums,
int  sorted 
)

Remove items from set of package instances to iterate.

Note
Sorted hdrNums are always passed in rpmlib.
Parameters
mirpm database iterator
hdrNumsarray of package instances
nHdrNumsnumber of elements in array
sortedis the array sorted? (array will be sorted on return)
Returns
0 on success, 1 on failure (bad args)

Definition at line 2449 of file rpmdb.c.

References _hton_ui(), and rpmmi_s::mi_bf.

Referenced by checkPackageSet(), nwlookupTag(), rpmtsAddObsoletes(), rpmtsEraseDebuginfo(), runImmedTriggers(), runScriptTriggersLoop(), runTriggersLoop(), unsatisfiedDepend(), and wnlookupTag().

§ rpmmiSetModified()

int rpmmiSetModified ( rpmmi  mi,
int  modified 
)

Modify iterator to mark header for lazy write on release.

Parameters
mirpm database iterator
modifiednew value of modified
Returns
previous value

Definition at line 2179 of file rpmdb.c.

References rpmmi_s::mi_modified.

§ rpmmiSetRewrite()

int rpmmiSetRewrite ( rpmmi  mi,
int  rewrite 
)

Prepare iterator for lazy writes.

Note
Must be called before rpmmiNext() with CDB model database.
Parameters
mirpm database iterator
rewritenew value of rewrite
Returns
previous value

Definition at line 2166 of file rpmdb.c.

References DB_WRITECURSOR, and rpmmi_s::mi_cflags.

§ rpmmiSort()

int rpmmiSort ( rpmmi  mi)

Sort iterator instances.

Parameters
mirpm database iterator
Returns
0 on success

Definition at line 2416 of file rpmdb.c.

References hdrNumCmp(), rpmmi_s::mi_set, rpmmi_s::mi_sorted, and rpm_mergesort().

Referenced by rpmtsFindBaseNamesInDB().

§ rpmmiUnlink()

rpmmi rpmmiUnlink ( rpmmi  mi)

Unreference a rpm database iterator.

Parameters
mirpm database iterator
Returns
NULL on last dereference

Variable Documentation

§ _rpmdb_debug

int _rpmdb_debug

Definition at line 61 of file rpmdb.c.

§ _rpmmi_debug

int _rpmmi_debug

Definition at line 64 of file rpmdb.c.