RPM Community Forums

Mailing List Message of <rpm-cvs>

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

From: Alexey Tourbin <at@rpm5.org>
Date: Thu 07 Aug 2008 - 21:17:20 CEST
Message-Id: <20080807191720.649515D3E5@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Alexey Tourbin
  Root:   /v/rpm/cvs                       Email:  at@rpm5.org
  Module: rpm                              Date:   07-Aug-2008 21:17:20
  Branch: HEAD                             Handle: 2008080719172000

  Modified files:
    rpm/rpmdb               rpmdb.c

  Log:
    rpmdb.c (rpmdbRemove): use DBT_INIT

  Summary:
    Revision    Changes     Path
    1.260       +35 -37     rpm/rpmdb/rpmdb.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/rpmdb.c
  ============================================================================
  $ cvs diff -u -r1.259 -r1.260 rpmdb.c
  --- rpm/rpmdb/rpmdb.c	7 Aug 2008 18:40:13 -0000	1.259
  +++ rpm/rpmdb/rpmdb.c	7 Aug 2008 19:17:20 -0000	1.260
  @@ -2827,10 +2827,6 @@
   int rpmdbRemove(rpmdb db, /*@unused@*/ int rid, unsigned int hdrNum,
   		/*@unused@*/ rpmts ts)
   {
  -DBC * dbcursor = NULL;
  -DBT * key = alloca(sizeof(*key));
  -DBT * data = alloca(sizeof(*data));
  -union _dbswap mi_offset;
       HE_t he = memset(alloca(sizeof(*he)), 0, sizeof(*he));
       Header h;
       sigset_t signalMask;
  @@ -2841,9 +2837,6 @@
       if (db == NULL)
   	return 0;
   
  -memset(key, 0, sizeof(*key));
  -memset(data, 0, sizeof(*data));
  -
       {	rpmdbMatchIterator mi;
   	mi = rpmdbInitIterator(db, RPMDBI_PACKAGES, &hdrNum, sizeof(hdrNum));
   	h = rpmdbNextIterator(mi);
  @@ -2885,6 +2878,11 @@
   
   	if (db->db_tags != NULL)
   	for (dbix = 0; dbix < db->db_ndbi; dbix++) {
  +	    DBC * dbcursor = NULL;
  +	    DBT k = DBT_INIT;
  +	    DBT v = DBT_INIT;
  +	    union _dbswap mi_offset;
  +
   	    tagStore_t dbiTag = db->db_tags + dbix;
   	    rpmTag rpmtag = dbiTag->tag;
   	    const char * dbiBN = (dbiTag->str != NULL
  @@ -2918,18 +2916,18 @@
   mi_offset.ui = hdrNum;
   if (dbiByteSwapped(dbi) == 1)
       _DBSWAP(mi_offset);
  -		key->data = &mi_offset;
  +		k.data = &mi_offset;
   /*@=immediatetrans@*/
  -		key->size = (UINT32_T) sizeof(mi_offset.ui);
  +		k.size = (UINT32_T) sizeof(mi_offset.ui);
   
   		rc = dbiCopen(dbi, dbi->dbi_txnid, &dbcursor, DB_WRITECURSOR);
  -		rc = dbiGet(dbi, dbcursor, key, data, DB_SET);
  +		rc = dbiGet(dbi, dbcursor, &k, &v, DB_SET);
   		if (rc) {
   		    rpmlog(RPMLOG_ERR,
   			_("error(%d) setting header #%d record for %s removal\n"),
   			rc, hdrNum, dbiBN);
   		} else
  -		    rc = dbiDel(dbi, dbcursor, key, data, 0);
  +		    rc = dbiDel(dbi, dbcursor, &k, &v, 0);
   		xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR);
   		dbcursor = NULL;
   		if (!dbi->dbi_no_dbsync)
  @@ -2980,24 +2978,24 @@
   		stringvalued = 0;
   		switch (he->t) {
   		case RPM_UINT8_TYPE:
  -		    key->size = (UINT32_T) sizeof(*he->p.ui8p);
  -/*@i@*/		    key->data = he->p.ui8p + i;
  +		    k.size = (UINT32_T) sizeof(*he->p.ui8p);
  +/*@i@*/		    k.data = he->p.ui8p + i;
   		    /*@switchbreak@*/ break;
   		case RPM_UINT16_TYPE:
  -		    key->size = (UINT32_T) sizeof(*he->p.ui16p);
  -/*@i@*/		    key->data = he->p.ui16p + i;
  +		    k.size = (UINT32_T) sizeof(*he->p.ui16p);
  +/*@i@*/		    k.data = he->p.ui16p + i;
   		    /*@switchbreak@*/ break;
   		case RPM_UINT32_TYPE:
  -		    key->size = (UINT32_T) sizeof(*he->p.ui32p);
  -/*@i@*/		    key->data = he->p.ui32p + i;
  +		    k.size = (UINT32_T) sizeof(*he->p.ui32p);
  +/*@i@*/		    k.data = he->p.ui32p + i;
   		    /*@switchbreak@*/ break;
   		case RPM_UINT64_TYPE:
  -		    key->size = (UINT32_T) sizeof(*he->p.ui64p);
  -/*@i@*/		    key->data = he->p.ui64p + i;
  +		    k.size = (UINT32_T) sizeof(*he->p.ui64p);
  +/*@i@*/		    k.data = he->p.ui64p + i;
   		    /*@switchbreak@*/ break;
   		case RPM_BIN_TYPE:
  -		    key->size = (UINT32_T) he->c;
  -/*@i@*/		    key->data = he->p.ptr;
  +		    k.size = (UINT32_T) he->c;
  +/*@i@*/		    k.data = he->p.ptr;
   		    he->c = 1;		/* XXX break out of loop. */
   		    /*@switchbreak@*/ break;
   		case RPM_I18NSTRING_TYPE:	/* XXX never occurs. */
  @@ -3018,8 +3016,8 @@
   			for (j = 0; j < (unsigned) dlen; j++, t++, s += 2)
   			    *t = (rpmuint8_t) (nibble(s[0]) << 4) | nibble(s[1]);
   /*@=type@*/
  -			key->data = bin;
  -			key->size = (UINT32_T) dlen;
  +			k.data = bin;
  +			k.size = (UINT32_T) dlen;
   			/*@switchbreak@*/ break;
   		    }
   		    /* Extract the pubkey id from the base64 blob. */
  @@ -3029,14 +3027,14 @@
   			nbin = pgpExtractPubkeyFingerprint(he->p.argv[i], bin);
   			if (nbin <= 0)
   			    /*@innercontinue@*/ continue;
  -			key->data = bin;
  -			key->size = (UINT32_T) nbin;
  +			k.data = bin;
  +			k.size = (UINT32_T) nbin;
   			/*@switchbreak@*/ break;
   		    }
   		    /*@fallthrough@*/
   		default:
  -/*@i@*/		    key->data = (void *) he->p.argv[i];
  -		    key->size = (UINT32_T) strlen(he->p.argv[i]);
  +/*@i@*/		    k.data = (void *) he->p.argv[i];
  +		    k.size = (UINT32_T) strlen(he->p.argv[i]);
   		    stringvalued = 1;
   		    /*@switchbreak@*/ break;
   		}
  @@ -3045,7 +3043,7 @@
   		    if (he->c == 1 && stringvalued) {
   			rpmlog(RPMLOG_DEBUG,
   				D_("removing \"%s\" from %s index.\n"),
  -				(char *)key->data, dbiBN);
  +				(char *)k.data, dbiBN);
   		    } else {
   			rpmlog(RPMLOG_DEBUG,
   				D_("removing %u entries from %s index.\n"),
  @@ -3065,13 +3063,13 @@
   
   		set = NULL;
   
  -if (key->size == 0) key->size = (UINT32_T) strlen((char *)key->data);
  -if (key->size == 0) key->size++;	/* XXX "/" fixup. */
  +if (k.size == 0) k.size = (UINT32_T) strlen((char *)k.data);
  +if (k.size == 0) k.size++;	/* XXX "/" fixup. */
    
   /*@-compmempass@*/
  -		rc = dbiGet(dbi, dbcursor, key, data, DB_SET);
  +		rc = dbiGet(dbi, dbcursor, &k, &v, DB_SET);
   		if (rc == 0) {			/* success */
  -		    (void) dbt2set(dbi, data, &set);
  +		    (void) dbt2set(dbi, &v, &set);
   		} else if (rc == DB_NOTFOUND) {	/* not found */
   		    /*@innercontinue@*/ continue;
   		} else {			/* error */
  @@ -3093,18 +3091,18 @@
   
   /*@-compmempass@*/
   		if (set->count > 0) {
  -		    (void) set2dbt(dbi, data, set);
  -		    rc = dbiPut(dbi, dbcursor, key, data, DB_KEYLAST);
  +		    (void) set2dbt(dbi, &v, set);
  +		    rc = dbiPut(dbi, dbcursor, &k, &v, DB_KEYLAST);
   		    if (rc) {
   			rpmlog(RPMLOG_ERR,
   				_("error(%d) storing record into %s\n"),
   				rc, dbiBN);
   			ret += 1;
   		    }
  -		    data->data = _free(data->data);
  -		    data->size = 0;
  +		    v.data = _free(v.data);
  +		    v.size = 0;
   		} else {
  -		    rc = dbiDel(dbi, dbcursor, key, data, 0);
  +		    rc = dbiDel(dbi, dbcursor, &k, &v, 0);
   		    if (rc) {
   			rpmlog(RPMLOG_ERR,
   				_("error(%d) removing record from %s\n"),
  @@ .
Received on Thu Aug 7 21:17:20 2008
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.