RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 26-Jun-2009 07:17:09 Branch: HEAD Handle: 2009062605170801 Added files: rpm/rpmio rpmbf.c rpmbf.h Modified files: rpm CHANGES rpm/rpmdb rpmdb.c rpm/rpmio Makefile.am librpmio.vers poptIO.c rpmio.c Log: - rpmbf: stub-in a Bloom filter. Summary: Revision Changes Path 1.3033 +1 -0 rpm/CHANGES 1.307 +3 -48 rpm/rpmdb/rpmdb.c 1.232 +9 -7 rpm/rpmio/Makefile.am 2.126 +7 -0 rpm/rpmio/librpmio.vers 1.53 +5 -0 rpm/rpmio/poptIO.c 2.1 +76 -0 rpm/rpmio/rpmbf.c 2.1 +173 -0 rpm/rpmio/rpmbf.h 1.198 +2 -0 rpm/rpmio/rpmio.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3032 -r1.3033 CHANGES --- rpm/CHANGES 25 Jun 2009 12:38:48 -0000 1.3032 +++ rpm/CHANGES 26 Jun 2009 05:17:08 -0000 1.3033 @@ -1,5 +1,6 @@ 5.2b1 -> 5.3a1 + - jbj: rpmbf: stub-in a Bloom filter. - jbj: selinux: fix: disabler bit toggle sense was inverted. - jbj: js: add getters/setters to handle defvar() variables. - jbj: js: add methods and unit tests for the Aug class. @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.306 -r1.307 rpmdb.c --- rpm/rpmdb/rpmdb.c 29 May 2009 22:11:36 -0000 1.306 +++ rpm/rpmdb/rpmdb.c 26 Jun 2009 05:17:09 -0000 1.307 @@ -15,6 +15,9 @@ #include <rpmsq.h> #include <argv.h> +#define _RPMBF_INTERNAL +#include <rpmbf.h> /* pbm_set macros */ + #include <rpmtypes.h> #define _RPMTAG_INTERNAL @@ -78,54 +81,6 @@ #define _DBI_PERMS 0644 #define _DBI_MAJOR -1 -/* Bit mask macros. */ -/*...@-exporttype@*/ -typedef unsigned int __pbm_bits; -/*...@=exporttype@*/ -#define __PBM_NBITS /*...@-sizeoftype@*/(8 * sizeof(__pbm_bits))/*...@=sizeoftype@*/ -#define __PBM_IX(d) ((d) / __PBM_NBITS) -#define __PBM_MASK(d) ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS)) -/*...@-exporttype@*/ -typedef struct { - __pbm_bits bits[1]; -} pbm_set; -/*...@=exporttype@*/ -#define __PBM_BITS(set) ((set)->bits) - -#define PBM_FREE(s) _free(s); -#define PBM_SET(d, s) (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d)) -#define PBM_CLR(d, s) (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d)) -#define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0) - -#define PBM_ALLOC(d) xcalloc(__PBM_IX (d) + 1, __PBM_NBITS/8) - -/** - * Reallocate a bit map. - * @retval sp address of bit map pointer - * @retval odp no. of bits in map - * @param nd desired no. of bits - */ -/*...@unused@*/ -static inline pbm_set * PBM_REALLOC(pbm_set ** sp, int * odp, int nd) - /*...@modifies *sp, *odp @*/ -{ - int i, nb; - - if (nd > (*odp)) { - nd *= 2; - nb = __PBM_IX(nd) + 1; -/*...@-unqualifiedtrans@*/ - *sp = xrealloc(*sp, nb * (__PBM_NBITS/8)); -/*...@=unqualifiedtrans@*/ - for (i = __PBM_IX(*odp) + 1; i < nb; i++) - __PBM_BITS(*sp)[i] = 0; - *odp = nd; - } -/*...@-compdef -retalias -userelea...@*/ - return *sp; -/*...@=compdef =retalias =userelea...@*/ -} - /** * Convert hex to binary nibble. * @param c hex character @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/Makefile.am ============================================================================ $ cvs diff -u -r1.231 -r1.232 Makefile.am --- rpm/rpmio/Makefile.am 12 Jun 2009 19:04:34 -0000 1.231 +++ rpm/rpmio/Makefile.am 26 Jun 2009 05:17:09 -0000 1.232 @@ -66,11 +66,12 @@ argv.h ar.h cpio.h crc.h envvar.h fnmatch.h fts.h glob.h iosm.h \ md2.h md4.h rmd128.h rmd160.h rmd256.h rmd320.h sha224.h \ salsa10.h salsa20.h tiger.h \ - poptIO.h rpmaug.h rpmbc.h rpmbz.h rpmdav.h rpmficl.h rpmgc.h rpmhash.h \ - rpmhook.h rpmio_internal.h rpmjs.h rpmjsio.h rpmkeyring.h rpmku.h \ - rpmlua.h rpmmg.h rpmnss.h rpmperl.h rpmpython.h rpmruby.h rpmsq.h \ - rpmsquirrel.h rpmssl.h rpmsyck.h rpmtcl.h rpmurl.h rpmuuid.h rpmxar.h \ - rpmz.h rpmzq.h tar.h ugid.h rpmio-stub.h + poptIO.h rpmaug.h rpmbc.h rpmbf.h rpmbz.h rpmdav.h rpmficl.h rpmgc.h \ + rpmhash.h rpmhook.h rpmio_internal.h rpmjs.h rpmjsio.h rpmkeyring.h \ + rpmku.h rpmlua.h rpmmg.h rpmnss.h rpmperl.h rpmpython.h \ + rpmruby.h rpmsq.h rpmsquirrel.h rpmssl.h rpmsyck.h rpmtcl.h \ + rpmurl.h rpmuuid.h rpmxar.h rpmz.h rpmzq.h \ + tar.h ugid.h rpmio-stub.h usrlibdir = $(libdir) usrlib_LTLIBRARIES = librpmio.la @@ -80,8 +81,9 @@ macro.c mire.c mount.c poptIO.c \ md2.c md4.c rmd128.c rmd160.c rmd256.c rmd320.c sha224.c \ salsa10.c salsa20.c tiger.c \ - rpmaug.c rpmbc.c rpmdav.c rpmficl.c rpmgc.c rpmhash.c rpmhook.c \ - rpmio.c rpmiob.c rpmio-stub.c rpmjs.c rpmjsio.c rpmkeyring.c \ + rpmaug.c rpmbc.c rpmbf.c rpmdav.c rpmficl.c rpmgc.c \ + rpmhash.c rpmhook.c rpmio.c rpmiob.c rpmio-stub.c \ + rpmjs.c rpmjsio.c rpmkeyring.c \ rpmku.c rpmlog.c rpmlua.c rpmmalloc.c rpmmg.c rpmnss.c \ rpmperl.c rpmpgp.c rpmpython.c rpmrpc.c rpmruby.c rpmsq.c \ rpmsquirrel.c rpmssl.c rpmsyck.c rpmsw.c rpmtcl.c rpmuuid.c rpmxar.c \ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/librpmio.vers ============================================================================ $ cvs diff -u -r2.125 -r2.126 librpmio.vers --- rpm/rpmio/librpmio.vers 18 Jun 2009 21:31:41 -0000 2.125 +++ rpm/rpmio/librpmio.vers 26 Jun 2009 05:17:09 -0000 2.126 @@ -279,6 +279,13 @@ rpmaugSave; rpmaugSet; rpmbcImplVecs; + _rpmbf_debug; + rpmbfFree; + rpmbfNew; + rpmbfAdd; + rpmbfChk; + rpmbfClr; + rpmbfDel; rpmCleanPath; rpmCLIMacroContext; rpmDefineMacro; @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/poptIO.c ============================================================================ $ cvs diff -u -r1.52 -r1.53 poptIO.c --- rpm/rpmio/poptIO.c 12 Jun 2009 19:04:34 -0000 1.52 +++ rpm/rpmio/poptIO.c 26 Jun 2009 05:17:09 -0000 1.53 @@ -25,6 +25,8 @@ #include <rpmssl.h> #endif +#include <rpmbf.h> + #include <rpmaug.h> #include <rpmficl.h> #include <rpmjs.h> @@ -416,10 +418,13 @@ N_("Debug miRE patterns"), NULL}, { "pgpdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_pgp_debug, -1, N_("Debug PGP usage"), NULL}, + { "rpmbfdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmbf_debug, -1, + N_("Debug Bloom filters"), NULL}, { "rpmiodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmio_debug, -1, N_("Debug rpmio I/O"), NULL}, { "rpmiobdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmiob_debug, -1, N_("Debug rpmio I/O buffers"), NULL}, + { "rpmaugdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmaug_debug, -1, N_("Debug embedded Augeas interpreter"), NULL}, { "rpmficldebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmficl_debug, -1, @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmbf.c ============================================================================ $ cvs diff -u -r0 -r2.1 rpmbf.c --- /dev/null 2009-06-26 07:15:31 +0200 +++ rpmbf.c 2009-06-26 07:17:09 +0200 @@ -0,0 +1,76 @@ +/** \ingroup rpmio + * \file rpmio/rpmbf.c + */ + +#include "system.h" + +#include <rpmiotypes.h> +#include <rpmio.h> /* for *Pool methods */ +#include <rpmlog.h> +#define _RPMBF_INTERNAL +#include <rpmbf.h> + +#include "debug.h" + +/*...@unchecked@*/ +int _rpmbf_debug = 0; + +/*...@-mustmod@*/ /* XXX splint on crack */ +static void rpmbfFini(void * _bf) + /*...@globals fileSystem @*/ + /*...@modifies *_bf, fileSystem @*/ +{ + rpmbf bf = _bf; + + bf->bits = PBM_FREE(bf->bits); +} +/*...@=mustmod@*/ + +/*...@unchecked@*/ /*...@only@*/ /*...@null@*/ +rpmioPool _rpmbfPool = NULL; + +static rpmbf rpmbfGetPool(/*...@null@*/ rpmioPool pool) + /*...@globals _rpmbfPool, fileSystem @*/ + /*...@modifies pool, _rpmbfPool, fileSystem @*/ +{ + rpmbf bf; + + if (_rpmbfPool == NULL) { + _rpmbfPool = rpmioNewPool("bf", sizeof(*bf), -1, _rpmbf_debug, + NULL, NULL, rpmbfFini); + pool = _rpmbfPool; + } + return (rpmbf) rpmioGetPool(pool, sizeof(*bf)); +} + +rpmbf rpmbfNew(size_t n, size_t m, size_t k, unsigned flags) +{ + rpmbf bf = rpmbfGetPool(_rpmbfPool); + + bf->n = (n > 0 ? n : 1024); + bf->m = (m > 0 ? m : 8192); + bf->k = (k > 0 ? k : 1); + bf->bits = PBM_ALLOC(bf->m); + + return rpmbfLink(bf); +} + +int rpmbfAdd(rpmbf bf, const char * s) +{ + return 0; +} + +int rpmbfChk(rpmbf bf, const char * s) +{ + return 0; +} + +int rpmbfClr(rpmbf bf) +{ + return 0; +} + +int rpmbfDel(rpmbf bf, const char * s) +{ + return 0; +} @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmbf.h ============================================================================ $ cvs diff -u -r0 -r2.1 rpmbf.h --- /dev/null 2009-06-26 07:15:31 +0200 +++ rpmbf.h 2009-06-26 07:17:09 +0200 @@ -0,0 +1,173 @@ +#ifndef H_RPMBF +#define H_RPMBF + +/** \ingroup rpmio + * \file rpmio/rpmbf.h + */ + +/** \ingroup rpmio + */ +/*...@unchecked@*/ +extern int _rpmbf_debug; + +/** \ingroup rpmio + */ +typedef /*...@refcounted@*/ struct rpmbf_s * rpmbf; + +typedef unsigned int __pbm_bits; + +typedef struct { + __pbm_bits bits[1]; +} pbm_set; + +#if defined(_RPMBF_INTERNAL) +/** \ingroup rpmio + */ +struct rpmbf_s { + struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */ + size_t m; + size_t n; + size_t k; +/*...@relnull@*/ + unsigned char * bits; +#if defined(__LCLINT__) +/*...@refs@*/ + int nrefs; /*!< (unused) keep splint happy */ +#endif +}; +#endif /* _RPMBF_INTERNAL */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_RPMBF_INTERNAL) + +/* Bit mask macros. */ +#define __PBM_NBITS /*...@-sizeoftype@*/(8 * sizeof(__pbm_bits))/*...@=sizeoftype@*/ +#define __PBM_IX(d) ((d) / __PBM_NBITS) +#define __PBM_MASK(d) ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS)) +#define __PBM_BITS(set) ((set)->bits) + +#define PBM_FREE(s) _free(s); +#define PBM_SET(d, s) (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d)) +#define PBM_CLR(d, s) (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d)) +#define PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0) + +#define PBM_ALLOC(d) xcalloc(__PBM_IX (d) + 1, __PBM_NBITS/8) + +/** + * Reallocate a bit map. + * @retval sp address of bit map pointer + * @retval odp no. of bits in map + * @param nd desired no. of bits + */ +/*...@unused@*/ +static inline pbm_set * PBM_REALLOC(pbm_set ** sp, int * odp, int nd) + /*...@modifies *sp, *odp @*/ +{ + int i, nb; + + if (nd > (*odp)) { + nd *= 2; + nb = __PBM_IX(nd) + 1; +/*...@-unqualifiedtrans@*/ + *sp = xrealloc(*sp, nb * (__PBM_NBITS/8)); +/*...@=unqualifiedtrans@*/ + for (i = __PBM_IX(*odp) + 1; i < nb; i++) + __PBM_BITS(*sp)[i] = 0; + *odp = nd; + } +/*...@-compdef -retalias -userelea...@*/ + return *sp; +/*...@=compdef =retalias =userelea...@*/ +} + +#endif /* _RPMBF_INTERNAL */ + +/** + * Unreference a Bloom filter instance. + * @param bf Bloom filter + * @return NULL on last dereference + */ +/*...@unused@*/ /*...@null@*/ +rpmbf rpmbfUnlink (/*...@killref@*/ /*...@only@*/ /*...@null@*/ rpmbf bf) + /*...@modifies bf @*/; +#define rpmbfUnlink(_ds) \ + ((rpmbf)rpmioUnlinkPoolItem((rpmioItem)(_bf), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Reference a Bloom filter instance. + * @param bf Bloom filter + * @return new Bloom filter reference + */ +/*...@unused@*/ /*...@newref@*/ /*...@null@*/ +rpmbf rpmbfLink (/*...@null@*/ rpmbf bf) + /*...@modifies bf @*/; +#define rpmbfLink(_bf) \ + ((rpmbf)rpmioLinkPoolItem((rpmioItem)(_bf), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Destroy a Bloom filter. + * @param bf Bloom filter + * @return NULL on last dereference + */ +/*...@null@*/ +rpmbf rpmbfFree(/*...@killref@*/ /*...@null@*/rpmbf bf) + /*...@modifies bf @*/; +#define rpmbfFree(_bf) \ + ((rpmbf)rpmioFreePoolItem((rpmioItem)(_bf), __FUNCTION__, __FILE__, __LINE__)) + +/** + * Create a Bloom filter. + * @param n + * @param m + * @param k + * @param flags flags + * @return new Bloom filter + */ +/*...@newref@*/ /*...@null@*/ +rpmbf rpmbfNew(size_t n, size_t m, size_t k, unsigned flags) + /*...@*/; + +/** + * Add string to a Bloom filter. + * @param bf Bloom filter + * @param s string + * @return 0 always + */ +int rpmbfAdd(rpmbf bf, const char * s) + /*...@modifies bf @*/; + +/** + * Clear a Bloom filter, discarding all set memberships. + * @param bf Bloom filter + * @return 0 always + */ +int rpmbfClr(rpmbf bf) + /*...@modifies bf @*/; + +/** + * Check for string in a Bloom filter. + * @param bf Bloom filter + * @param s string + * @return 1 if string is present, 0 if not + */ +int rpmbfChk(rpmbf bf, const char * s) + /*...@modifies bf @*/; + +/** + * Delete string from a Bloom filter. + * @todo Counting bloom filter needed. + * @param bf Bloom filter + * @param s string + * @return 0 always + */ +int rpmbfDel(rpmbf bf, const char * s) + /*...@modifies bf @*/; + +#ifdef __cplusplus +} +#endif + +#endif /* H_RPMBF */ @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmio.c ============================================================================ $ cvs diff -u -r1.197 -r1.198 rpmio.c --- rpm/rpmio/rpmio.c 14 Jun 2009 23:41:25 -0000 1.197 +++ rpm/rpmio/rpmio.c 26 Jun 2009 05:17:09 -0000 1.198 @@ -3133,6 +3133,7 @@ extern rpmioPool _rpmiobPool; /*...@-shadow@*/ extern rpmioPool _mirePool; + extern rpmioPool _rpmbfPool; extern rpmioPool _htPool; extern rpmioPool _ctxPool; extern rpmioPool _rpmsyckPool; @@ -3185,6 +3186,7 @@ _mirePool = rpmioFreePool(_mirePool); _rpmmgPool = rpmioFreePool(_rpmmgPool); + _rpmbfPool = rpmioFreePool(_rpmbfPool); _htPool = rpmioFreePool(_htPool); _ctxPool = rpmioFreePool(_ctxPool); _rpmsyckPool = rpmioFreePool(_rpmsyckPool); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org