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

Reply via email to