[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ db3.c rpmdb.c

2010-04-30 Thread Jeff Johnson
  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:   30-Apr-2010 17:07:17
  Branch: HEAD Handle: 2010043015071601

  Modified files:
rpm CHANGES
rpm/rpmdb   db3.c rpmdb.c

  Log:
- rpmdb: fix: replace assert failures with RPMRC_FAIL returns.
- dbi: rework the error message to supply copious debug details.
- dbi: fix: --import as non-root assert failure.

  Summary:
RevisionChanges Path
1.3342  +3  -0  rpm/CHANGES
1.152   +15 -10 rpm/rpmdb/db3.c
1.387   +28 -18 rpm/rpmdb/rpmdb.c
  

  patch -p0 '@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.3341 -r1.3342 CHANGES
  --- rpm/CHANGES   30 Apr 2010 00:42:02 -  1.3341
  +++ rpm/CHANGES   30 Apr 2010 15:07:16 -  1.3342
  @@ -1,5 +1,8 @@
   
   5.2b1 - 5.3a1
  +- jbj: rpmdb: fix: replace assert failures with RPMRC_FAIL returns.
  +- jbj: dbi: rework the error message to supply copious debug details.
  +- jbj: dbi: fix: --import as non-root assert failure.
   - jbj: DB_CONFIG: fix: add mutex_set_max 8000. better scaling needed, 
todo++.
   - jbj: beecrypt: permit --with-beecrypt=internal (w manual 
checkout/autogen)
   - jbj: resurrect make dist.
  @@ .
  patch -p0 '@@ .'
  Index: rpm/rpmdb/db3.c
  
  $ cvs diff -u -r1.151 -r1.152 db3.c
  --- rpm/rpmdb/db3.c   2 Apr 2010 12:30:10 -   1.151
  +++ rpm/rpmdb/db3.c   30 Apr 2010 15:07:17 -  1.152
  @@ -498,27 +498,26 @@
   #undef   _ENTRY
   
   /*...@-globuse -mustmod @*/  /* FIX: rpmError not annotated yet. */
  -static int cvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg,
  - int error, int printit)
  +static int Xcvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg,
  + int error, int printit,
  + const char * func, const char * fn, unsigned ln)
/*...@globals fileSystem @*/
/*...@modifies fileSystem @*/
   {
   int rc = error;
   
   if (printit  rc) {
  - /*...@-moduncon@*/ /* FIX: annotate db3 methods */
  - if (msg)
  - rpmlog(RPMLOG_ERR, _(db%d error(%d) from %s: %s\n),
  - DB_VERSION_MAJOR, rc, msg, db_strerror(error));
  - else
  - rpmlog(RPMLOG_ERR, _(db%d error(%d): %s\n),
  - DB_VERSION_MAJOR, rc, db_strerror(error));
  - /*...@=moduncon@*/
  +/*...@-moduncon@*/ /* FIX: annotate db3 methods */
  + rpmlog(RPMLOG_ERR, %s:%s:%u: %s(%d): %s\n,
  + func, fn, ln, msg, rc, db_strerror(error));
  +/*...@=moduncon@*/
   }
   
   return rc;
   }
   /*...@=globuse =mustmod @*/
  +#define  cvtdberr(_dbi, _msg, _error, _printit)  \
  +Xcvtdberr(_dbi, _msg, _error, _printit, __FUNCTION__, __FILE__, __LINE__)
   
   /**
* Return (possibly renamed) tagName. Handles arbitrary tags.
  @@ -2552,10 +2551,16 @@
xx = seqid_init(dbi,(const char *)u, sizeof(u), dbi-dbi_seq);
else
xx = seqid_init(dbi, dbi-dbi_seq_id, 0, dbi-dbi_seq);
  + if (xx) {
  + (void) db3close(dbi, 0);
  + dbi = NULL;
  + if (dbip) *dbip = dbi;
  + }
}
   } else {
(void) db3close(dbi, 0);
dbi = NULL;
  + if (dbip) *dbip = dbi;
   }
   
   urlfn = _free(urlfn);
  @@ .
  patch -p0 '@@ .'
  Index: rpm/rpmdb/rpmdb.c
  
  $ cvs diff -u -r1.386 -r1.387 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 6 Mar 2010 16:20:46 -   1.386
  +++ rpm/rpmdb/rpmdb.c 30 Apr 2010 15:07:17 -  1.387
  @@ -2538,11 +2538,11 @@
   sigset_t signalMask;
   dbiIndex dbi;
   size_t dbix;
  -int rc = 0;
  +int rc = RPMRC_FAIL; /* XXX RPMRC */
   int xx;
   
   if (db == NULL)
  - return 0;
  + return RPMRC_OK;/* XXX RPMRC */
   
   /* Retrieve header for use by associated secondary index callbacks. */
   {rpmmi mi;
  @@ -2556,7 +2556,7 @@
   if (h == NULL) {
rpmlog(RPMLOG_ERR, _(%s: cannot read header at 0x%x\n),
  rpmdbRemove, (unsigned)hdrNum);
  - return 1;
  + return RPMRC_FAIL;  /* XXX RPMRC */
   }
   
   he-tag = RPMTAG_NVRA;
  @@ -2587,8 +2587,10 @@
/* Don't bother if tag is not present. */
if (!headerGet(h, he, 0))
/*...@switchbreak@*/ break;
  +
dbi 

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ db3.c rpmdb.c

2009-12-08 Thread Jeff Johnson
  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:   08-Dec-2009 16:37:24
  Branch: HEAD Handle: 2009120815372301

  Modified files:
rpm CHANGES
rpm/rpmdb   db3.c rpmdb.c

  Log:
- rpmdb: consolidate primary key swabbing to network order.

  Summary:
RevisionChanges Path
1.3185  +1  -0  rpm/CHANGES
1.128   +1  -1  rpm/rpmdb/db3.c
1.349   +38 -46 rpm/rpmdb/rpmdb.c
  

  patch -p0 '@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.3184 -r1.3185 CHANGES
  --- rpm/CHANGES   8 Dec 2009 04:41:51 -   1.3184
  +++ rpm/CHANGES   8 Dec 2009 15:37:23 -   1.3185
  @@ -1,5 +1,6 @@
   
   5.2b1 - 5.3a1
  +- jbj: rpmdb: consolidate primary key swabbing to network order.
   - jbj: rpmdb: re-open dbenv w DB_RUNRECOVER rather than remove/verify.
   - jbj: rpmdb: handle optional .A just like optional -V and -R patterns.
   - jbj: rpmdb: use RPMTAG_NVRA patterns for RPMDBI_LABEL rpmmi iterators.
  @@ .
  patch -p0 '@@ .'
  Index: rpm/rpmdb/db3.c
  
  $ cvs diff -u -r1.127 -r1.128 db3.c
  --- rpm/rpmdb/db3.c   8 Dec 2009 04:41:53 -   1.127
  +++ rpm/rpmdb/db3.c   8 Dec 2009 15:37:24 -   1.128
  @@ -2029,7 +2029,7 @@
default:
break;
case DB_RUNRECOVERY:
  - rpmlog(RPMLOG_ERR, _(Re-opening dbenv with DB_RUNRECOVER 
...\n));
  + rpmlog(RPMLOG_ERR, _(Re-opening dbenv with DB_RECOVER ...\n));
dbi-dbi_eflags |= DB_RECOVER;
rc = db_init(dbi, dbhome, dbfile, dbsubfile, dbenv);
dbi-dbi_eflags = ~DB_RECOVER;
  @@ .
  patch -p0 '@@ .'
  Index: rpm/rpmdb/rpmdb.c
  
  $ cvs diff -u -r1.348 -r1.349 rpmdb.c
  --- rpm/rpmdb/rpmdb.c 7 Dec 2009 17:53:47 -   1.348
  +++ rpm/rpmdb/rpmdb.c 8 Dec 2009 15:37:24 -   1.349
  @@ -332,6 +332,19 @@
   _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \
 }
   
  +static inline uint32_t _ntohl(uint32_t ui)
  +{
  +union _dbswap mi_offset;
  +mi_offset.ui = ui;
  +if (_endian.uc[0] == 0x44)
  + _DBSWAP(mi_offset);
  +return mi_offset.ui;
  +}
  +static inline uint32_t _htonl(uint32_t ui)
  +{
  +return _ntohl(ui);
  +}
  +
   typedef struct _setSwap_s {
   union _dbswap hdr;
   union _dbswap tag;
  @@ -518,8 +531,8 @@
   int  mi_sorted;
   int  mi_cflags;
   int  mi_modified;
  -unsigned int mi_prevoffset;  /* header instance (big endian) */
  -unsigned int mi_offset;  /* header instance (big endian) */
  +uint32_t mi_prevoffset;  /* header instance (big endian) */
  +uint32_t mi_offset;  /* header instance (big endian) */
   /*...@refcounted@*/ /*...@null@*/
   rpmbfmi_bf;  /* Iterator instance Bloom filter. */
   int  mi_nre;
  @@ -1382,7 +1395,7 @@
   
   /* Iterate over all keys, collecting primary keys. */
   while ((rc = dbiPget(dbi, dbcursor, k, p, v, _flags)) == 0) {
  - union _dbswap mi_offset;
  + uint32_t hdrNum;
   unsigned ix;
   
if (_flags == DB_SET) _flags = DB_NEXT_DUP;
  @@ -1412,16 +1425,15 @@
}

/* Get a native endian copy of the primary package key. */
  - memcpy(mi_offset, p.data, sizeof(mi_offset.ui));
  - if (_endian.uc[0] == 0x44)
  - _DBSWAP(mi_offset);
  + memcpy(hdrNum, p.data, sizeof(hdrNum));
  + hdrNum = _ntohl(hdrNum);
   
/* Append primary package key to set. */
if (set == NULL)
set = xcalloc(1, sizeof(*set));
   ix = set-count;
/* XXX TODO: sort/uniqify set? */
  - (void) dbiAppendSet(set, mi_offset.ui, 1, sizeof(mi_offset.ui), 0);
  + (void) dbiAppendSet(set, hdrNum, 1, sizeof(hdrNum), 0);
   if (_jbj_debug)
   fprintf(stderr, \tset[%u] = %u\n, ix, dbiIndexRecordOffset(set, ix));
   }
  @@ -1709,12 +1721,8 @@
   
   uint32_t rpmmiInstance(rpmmi mi)
   {
  -union _dbswap mi_offset;
   /* Get a native endian copy of the primary package key. */
  -mi_offset.ui = (mi ? mi-mi_offset : 0);
  -if (_endian.uc[0] == 0x44)
  - _DBSWAP(mi_offset);
  -return mi_offset.ui;
  +return _ntohl(mi ? mi-mi_offset : 0);
   }
   
   unsigned int rpmmiCount(rpmmi mi) {
  @@ -2211,7 +2219,6 @@

[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ db3.c rpmdb.c rpmdb.h

2009-10-01 Thread Jeff Johnson
  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:   01-Oct-2009 16:52:08
  Branch: HEAD Handle: 2009100114520701

  Modified files:
rpm CHANGES
rpm/rpmdb   db3.c rpmdb.c rpmdb.h

  Log:
- dbi: permit tag tables to be secondary indices with dupes.

  Summary:
RevisionChanges Path
1.3134  +1  -0  rpm/CHANGES
1.103   +346 -5 rpm/rpmdb/db3.c
1.313   +33 -19 rpm/rpmdb/rpmdb.c
1.101   +5  -1  rpm/rpmdb/rpmdb.h
  

  patch -p0 '@@ .'
  Index: rpm/CHANGES
  
  $ cvs diff -u -r1.3133 -r1.3134 CHANGES
  --- rpm/CHANGES   29 Sep 2009 17:26:29 -  1.3133
  +++ rpm/CHANGES   1 Oct 2009 14:52:07 -   1.3134
  @@ -1,5 +1,6 @@
   
   5.2b1 - 5.3a1
  +- jbj: dbi: permit tag tables to be secondary indices with dupes.
   - devzero2000: add security CFLAGS for GCC if supported
   - jbj: dbi: configure new indices with 4b join keys and duplicates.
   - jbj: dbi: generate additional indices.
  @@ .
  patch -p0 '@@ .'
  Index: rpm/rpmdb/db3.c
  
  $ cvs diff -u -r1.102 -r1.103 db3.c
  --- rpm/rpmdb/db3.c   30 Sep 2009 06:31:32 -  1.102
  +++ rpm/rpmdb/db3.c   1 Oct 2009 14:52:08 -   1.103
  @@ -27,6 +27,8 @@
   #define  DB_CLIENT   DB_RPCCLIENT
   #endif
   
  +#define  DBIDEBUG(_dbi, _list)   if ((_dbi)-dbi_debug) fprintf _list
  +
   /*...@access rpmdb @*/
   /*...@access dbiIndex @*/
   /*...@access dbiIndexSet @*/
  @@ -150,6 +152,229 @@

\20\1WRONLY\2RDWR\7CREAT\10EXCL\11NOCTTY\12TRUNC\13APPEND\14NONBLOCK\15SYNC\16ASYNC\17DIRECT\20LARGEFILE\21DIRECTORY\22NOFOLLOW;
   #endif   /* NOTNOW */
   
  +typedef struct key_s {
  +uint32_t v;
  +const char *n;
  +} KEY;
  +
  +static const char * tblName(uint32_t v, KEY * tbl, size_t ntbl)
  +{
  +const char * n = NULL;
  +static char buf[32];
  +size_t i;
  +
  +for (i = 0; i  ntbl; i++) {
  + if (v != tbl[i].v)
  + continue;
  + n = tbl[i].n;
  + break;
  +}
  +if (n == NULL) {
  + snprintf(buf, sizeof(buf), 0x%x, v);
  + n = buf;
  +}
  +return n;
  +}
  +
  +static const char * fmtBits(uint32_t flags, KEY tbl[], size_t ntbl, char *t)
  +{
  +char pre = '';
  +char * te = t;
  +int i;
  +
  +sprintf(t, 0x%x, flags);
  +te = t;
  +te += strlen(te);
  +for (i = 0; i  32; i++) {
  + uint32_t mask = (1  i);
  + const char * name;
  +
  + if (!(flags  mask))
  + continue;
  +
  + name = tblName(mask, tbl, ntbl);
  + *te++ = pre;
  + pre = ',';
  + te = stpcpy(te, name);
  +}
  +if (pre == ',') *te++ = '';
  +*te = '\0';
  +return t;
  +}
  +
  +#define _ENTRY(_v)  { DB_##_v, #_v, }
  +
  +static KEY DBoflags[] = {
  +_ENTRY(AUTO_COMMIT),
  +_ENTRY(CREATE),
  +_ENTRY(EXCL),
  +_ENTRY(MULTIVERSION),
  +_ENTRY(NOMMAP),
  +_ENTRY(RDONLY),
  +_ENTRY(READ_UNCOMMITTED),
  +_ENTRY(THREAD),
  +_ENTRY(TRUNCATE),
  +};
  +static size_t nDBoflags = sizeof(DBoflags) / sizeof(DBoflags[0]);
  +static const char * fmtDBoflags(uint32_t flags)
  +{
  +static char buf[BUFSIZ];
  +char * te = buf;
  +te = stpcpy(te, \n\tflags: );
  +(void) fmtBits(flags, DBoflags, nDBoflags, te);
  +return buf;
  +}
  +#define  _OFLAGS(_dbi)   fmtDBoflags((_dbi)-dbi_oflags)
  +
  +static KEY DBCflags[] = {
  +_ENTRY(AFTER),   /* Dbc.put */
  +_ENTRY(APPEND),  /* Db.put */
  +_ENTRY(BEFORE),  /* Dbc.put */
  +_ENTRY(CONSUME), /* Db.get */
  +_ENTRY(CONSUME_WAIT),/* Db.get */
  +_ENTRY(CURRENT), /* Dbc.get, Dbc.put, DbLogc.get */
  +_ENTRY(FIRST),   /* Dbc.get, DbLogc-get */
  +_ENTRY(GET_BOTH),/* Db.get, Dbc.get */
  +_ENTRY(GET_BOTHC),   /* Dbc.get (internal) */
  +_ENTRY(GET_BOTH_RANGE),  /* Db.get, Dbc.get */
  +_ENTRY(GET_RECNO),   /* Dbc.get */
  +_ENTRY(JOIN_ITEM),   /* Dbc.get; don't do primary lookup */
  +_ENTRY(KEYFIRST),/* Dbc.put */
  +_ENTRY(KEYLAST), /* Dbc.put */
  +_ENTRY(LAST),/* Dbc.get, DbLogc-get */
  +_ENTRY(NEXT),/* Dbc.get, DbLogc-get */
  +_ENTRY(NEXT_DUP),/* Dbc.get */
  +_ENTRY(NEXT_NODUP),  /* Dbc.get */
  +_ENTRY(NODUPDATA),   /*