RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Per Øyvind Karlsen Root: /v/rpm/cvs Email: pkarl...@rpm5.org Module: rpm Date: 16-Feb-2011 19:56:28 Branch: rpm-5_3 Handle: 2011021618562701 Modified files: (Branch: rpm-5_3) rpm CHANGES rpm/rpmdb rpmdb.c Log: set mi->mi_count in rpmmiCount() when db cursor exists rather than always doing it in rpmmiNext() Summary: Revision Changes Path 1.3296.2.162+2 -0 rpm/CHANGES 1.386.2.10 +8 -7 rpm/rpmdb/rpmdb.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3296.2.161 -r1.3296.2.162 CHANGES --- rpm/CHANGES 16 Feb 2011 03:45:22 -0000 1.3296.2.161 +++ rpm/CHANGES 16 Feb 2011 18:56:27 -0000 1.3296.2.162 @@ -1,4 +1,6 @@ 5.3.8 -> 5.3.9: + - proyvind: set mi->mi_count in rpmmiCount() when db cursor exists rather + than always doing it in rpmmiNext() - jbj: rpmrc: fix: add missing nref++ on rpmdsFromPRCO() return segfault. - proyvind: set mi->mi_count when rpmmiNext() initializes db cursor so that rpmmiCount() won't break (mdvbz#62267) @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.386.2.9 -r1.386.2.10 rpmdb.c --- rpm/rpmdb/rpmdb.c 14 Feb 2011 01:57:48 -0000 1.386.2.9 +++ rpm/rpmdb/rpmdb.c 16 Feb 2011 18:56:28 -0000 1.386.2.10 @@ -1630,22 +1630,26 @@ unsigned int rpmmiCount(rpmmi mi) { unsigned int rc; + int initDbc; /* XXX Secondary db associated with Packages needs cursor record count */ - if (mi && mi->mi_primary && mi->mi_dbc == NULL) { + if (mi && mi->mi_primary && ((initDbc = mi->mi_dbc == NULL) || mi->mi_count == 0)) { dbiIndex dbi = dbiOpen(mi->mi_db, mi->mi_rpmtag, 0); DBT k = DBT_INIT; DBT v = DBT_INIT; int xx; + if(initDbc) { assert(dbi != NULL); /* XXX dbiCopen doesn't handle dbi == NULL */ - xx = dbiCopen(dbi, dbiTxnid(dbi), &mi->mi_dbc, mi->mi_cflags); + xx = dbiCopen(dbi, dbiTxnid(dbi), &mi->mi_dbc, mi->mi_cflags); + } k.data = mi->mi_keyp; k.size = (u_int32_t)mi->mi_keylen; if (k.data && k.size == 0) k.size = (UINT32_T) strlen((char *)k.data); if (k.data && k.size == 0) k.size++; /* XXX "/" fixup. */ if (!dbiGet(dbi, mi->mi_dbc, &k, &v, DB_SET)) xx = dbiCount(dbi, mi->mi_dbc, &mi->mi_count, 0); - mi->mi_dbc = NULL; + if(initDbc) + mi->mi_dbc = NULL; } rc = (mi ? mi->mi_count : 0); @@ -2154,9 +2158,6 @@ if (k.data && k.size == 0) k.size = (UINT32_T) strlen((char *)k.data); if (k.data && k.size == 0) k.size++; /* XXX "/" fixup. */ _flags = DB_SET; - if (!dbiGet(dbi, mi->mi_dbc, &k, &v, _flags)) - xx = dbiCount(dbi, mi->mi_dbc, &mi->mi_count, 0); - } else _flags = (mi->mi_setx ? DB_NEXT_DUP : DB_SET); @@ -2456,7 +2457,7 @@ } } else if (dbi && dbi->dbi_primary != NULL) { - /* XXX Special case #5: secondary ndex associated with primary table. */ + /* XXX Special case #5: secondary index associated w primary table. */ } else { /* Common case: retrieve join keys. */ @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org