[CVS] RPM: rpm/ CHANGES rpm/rpmdb/ db3.c rpmdb.c
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
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
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), /*