rpm  5.4.15
rpmmdb.c
Go to the documentation of this file.
1 
5 #include "system.h"
6 
7 #include <rpmiotypes.h>
8 #include <rpmio.h> /* for *Pool methods */
9 #include <rpmlog.h>
10 #include <rpmurl.h>
11 
12 #define _RPMMDB_INTERNAL
13 #include <rpmmdb.h>
14 
15 #include "debug.h"
16 
17 /*@unchecked@*/
18 int _rpmmdb_debug = 0;
19 
20 /*@unchecked@*/ /*@relnull@*/
22 
23 /*==============================================================*/
24 
25 static void rpmmdbFini(void * _mdb)
26  /*@globals fileSystem @*/
27  /*@modifies *_mdb, fileSystem @*/
28 {
29  rpmmdb mdb = (rpmmdb) _mdb;
30 
31  mdb->fn = _free(mdb->fn);
32 }
33 
34 /*@unchecked@*/ /*@only@*/ /*@null@*/
36 
37 static rpmmdb rpmmdbGetPool(/*@null@*/ rpmioPool pool)
38  /*@globals _rpmmdbPool, fileSystem @*/
39  /*@modifies pool, _rpmmdbPool, fileSystem @*/
40 {
41  rpmmdb mdb;
42 
43  if (_rpmmdbPool == NULL) {
44  _rpmmdbPool = rpmioNewPool("mdb", sizeof(*mdb), -1, _rpmmdb_debug,
45  NULL, NULL, rpmmdbFini);
46  pool = _rpmmdbPool;
47  }
48  mdb = (rpmmdb) rpmioGetPool(pool, sizeof(*mdb));
49  memset(((char *)mdb)+sizeof(mdb->_item), 0, sizeof(*mdb)-sizeof(mdb->_item));
50  return mdb;
51 }
52 
53 rpmmdb rpmmdbNew(const char * fn, int flags)
54 {
55  rpmmdb mdb = rpmmdbGetPool(_rpmmdbPool);
56 
57  if (fn)
58  mdb->fn = xstrdup(fn);
59 
60  return rpmmdbLink(mdb);
61 }
int _rpmmdb_debug
Definition: rpmmdb.c:18
char * xstrdup(const char *str)
Definition: rpmmalloc.c:321
rpmioPool _rpmmdbPool
Definition: rpmmdb.c:35
rpmmdb rpmmdbNew(const char *fn, int flags)
Create and load a mongodb wrapper.
Definition: rpmmdb.c:53
rpmmdb rpmmdbLink(rpmmdb mdb)
Reference a mongodb wrapper instance.
rpmmdb _rpmmdbI
Definition: rpmmdb.c:21
Yet Another syslog(3) API clone.
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
Definition: rpmmalloc.c:220
const char const bson int mongo_write_concern int flags
Definition: mongo.h:485
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
Definition: rpmmalloc.c:109
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
Definition: rpmiotypes.h:756
static rpmmdb rpmmdbGetPool(rpmioPool pool)
Definition: rpmmdb.c:37
struct rpmmdb_s * rpmmdb
Definition: rpmmdb.h:10
static void rpmmdbFini(void *_mdb)
Definition: rpmmdb.c:25